change format of ids json (#73)
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
46f3fd4c29
commit
c19c3480e7
|
@ -1,34 +1,66 @@
|
||||||
{
|
{
|
||||||
"testnet": {},
|
"groups": [
|
||||||
"devnet": {
|
{
|
||||||
"m43thNJ58XCjL798ZSq6JGAG1BnWskhdq5or6kcnfsD": {
|
"cluster": "devnet",
|
||||||
"8nBa69Ed8LCeP5YpZ1qB58DTEXq8fq7epfH5RsUVFATb": {
|
"name": "devnet.microwavedcola",
|
||||||
"banks": {
|
"publicKey": "8SPemjpDsXAqJNCL5vF2qk1XsocPVDTdY7sWVeU7t4NV",
|
||||||
"USDC": "ChuTYko8TLHb8Xn72gAe7PQTS9ULvrTayjMzjRGSmUn8",
|
"serum3ProgramId": "DESVgJVGajEgKGXhb6XmqDHGz3VjdgP7rEVESBgxmroY",
|
||||||
"SOL": "3V7vwKfQPhJn2bSywqsrvJwwCK9B5Dy3mE2SXCFxfW1N",
|
"mangoProgramId": "m43thNJ58XCjL798ZSq6JGAG1BnWskhdq5or6kcnfsD",
|
||||||
"ORCA": "fiHgPevezzWH3zWFsqnHdcA9Qeg6B15HfsDXGygBcqF",
|
"banks": [
|
||||||
"BTC": "HGw2wgfnytS3uEwPeyNijhoruA3K7msQaogkxC8EKdGX"
|
{
|
||||||
|
"name": "BTC",
|
||||||
|
"publicKey": "7JRb4RzjAwTffgsLBh65gL4fyLJqzZc98Z1WKBDCJopZ"
|
||||||
},
|
},
|
||||||
"stubOracles": {
|
{
|
||||||
"USDC": "DfbZP2mdLnHKWT5tVGb3MyaqEJpEfVQGi8LSP1gxgCeN"
|
"name": "USDC",
|
||||||
|
"publicKey": "97hK4n6sZFDJAnCfyS3vSWeugZmdyhvMJv3WjLNuZAdo"
|
||||||
},
|
},
|
||||||
"mintInfos": {
|
{
|
||||||
"ORCA": "GXW8pBd3wZx8QZCoxsTj4CT3qGfoSGED6SB2bKXonZAs",
|
"name": "ORCA",
|
||||||
"BTC": "6onpaK9yFJBcV5d6Vs8vUnWF5pKDBDCo3rq4E9gva6nh",
|
"publicKey": "Dmh7P1gsZdLrPabuDtTzPYPgTLJWwu8e59TxXQ2Q5V9u"
|
||||||
"USDC": "4gdSUfDBo5YibmanYL1N5uDdcBSdkpx75AwmUZWasFPW",
|
|
||||||
"SOL": "BEckAgpZQmSpcA2ncgb3LWfRHxnwG3WsNqpkaXQzAMA2"
|
|
||||||
},
|
},
|
||||||
"serum3Markets": {
|
{
|
||||||
"BTC/USDC": "AThBBA35mBxnUi3rT7YPVZKDnpZbi2ZsNSzJZkfJrFoA"
|
"name": "SOL",
|
||||||
},
|
"publicKey": "GyCanBHkomvNZGJiDyRZpajXjZ5GWGN6KL4JXtcM9Fnn"
|
||||||
"serum3MarketExternals": {
|
|
||||||
"BTC/USDC": "DW83EpHFywBxCHmyARxwj3nzxJd7MUdSeznmrdzZKNZB"
|
|
||||||
},
|
|
||||||
"perpMarkets": {
|
|
||||||
"BTC/USDC": "D2cYz3LdYfzcpNcbx4TFr4P8C24XUzPtXPnyZSyhA8oa"
|
|
||||||
}
|
}
|
||||||
}
|
],
|
||||||
|
"stubOracles": [
|
||||||
|
{
|
||||||
|
"name": "USDC",
|
||||||
|
"publicKey": "6vWHjKupnkpRfN61DvESQwKt4cNSAkXbej7aQ4TRwFEm"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"mintInfos": [
|
||||||
|
{
|
||||||
|
"name": "USDC",
|
||||||
|
"publicKey": "FiDdmANpx3JDdDEJpvDimpVUhAnnduGZ5YPyd6yWovkt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BTC",
|
||||||
|
"publicKey": "A2jFoKiSLoRbtgJUiXGnRGCVrMTwZNth3K7rcxc9pu57"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ORCA",
|
||||||
|
"publicKey": "3cZZk1jZDZqh2HzgvFvMQ67QDWMZfLbcFp9uziE63iSS"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SOL",
|
||||||
|
"publicKey": "9UqfN1us6YYigrXjWA6yazeTg9EUfNa5eiJSFJj4qbeq"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"serum3Markets": [
|
||||||
|
{
|
||||||
|
"name": "BTC/USDC",
|
||||||
|
"publicKey": "3BABCXXwr9UG782xPHaVjBYG7H2B9HkuY4tGZy9MtU5T",
|
||||||
|
"marketExternal": "DW83EpHFywBxCHmyARxwj3nzxJd7MUdSeznmrdzZKNZB"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"perpMarkets": [
|
||||||
|
{
|
||||||
|
"name": "BTC/USDC",
|
||||||
|
"publicKey": "5ZwVhP5PYkKtx2H4WL2JxSvWL6AALFzwubwM5dsR5XHF"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
]
|
||||||
"mainnet": {}
|
}
|
||||||
}
|
|
|
@ -1,7 +1,7 @@
|
||||||
import { Market } from '@project-serum/serum';
|
import { Market } from '@project-serum/serum';
|
||||||
import { PublicKey } from '@solana/web3.js';
|
import { PublicKey } from '@solana/web3.js';
|
||||||
import { MangoClient } from '../client';
|
import { MangoClient } from '../client';
|
||||||
import { MANGO_V4_ID, SERUM3_PROGRAM_ID } from '../constants';
|
import { SERUM3_PROGRAM_ID } from '../constants';
|
||||||
import { Id } from '../ids';
|
import { Id } from '../ids';
|
||||||
import { Bank, MintInfo } from './bank';
|
import { Bank, MintInfo } from './bank';
|
||||||
import { PerpMarket } from './perp';
|
import { PerpMarket } from './perp';
|
||||||
|
@ -44,12 +44,8 @@ export class Group {
|
||||||
public async reloadAll(client: MangoClient) {
|
public async reloadAll(client: MangoClient) {
|
||||||
let ids: Id | undefined = undefined;
|
let ids: Id | undefined = undefined;
|
||||||
|
|
||||||
if (client.useIds) {
|
if (client.groupName) {
|
||||||
ids = Id.fromIds(
|
ids = Id.fromIds(client.groupName);
|
||||||
client.cluster,
|
|
||||||
MANGO_V4_ID[client.cluster],
|
|
||||||
this.publicKey,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// console.time('group.reload');
|
// console.time('group.reload');
|
||||||
|
|
|
@ -35,6 +35,7 @@ import {
|
||||||
Serum3Side,
|
Serum3Side,
|
||||||
} from './accounts/serum3';
|
} from './accounts/serum3';
|
||||||
import { SERUM3_PROGRAM_ID } from './constants';
|
import { SERUM3_PROGRAM_ID } from './constants';
|
||||||
|
import { Id } from './ids';
|
||||||
import {
|
import {
|
||||||
buildOrcaInstruction,
|
buildOrcaInstruction,
|
||||||
ORCA_TOKEN_SWAP_ID_DEVNET,
|
ORCA_TOKEN_SWAP_ID_DEVNET,
|
||||||
|
@ -53,7 +54,7 @@ export class MangoClient {
|
||||||
public program: Program<MangoV4>,
|
public program: Program<MangoV4>,
|
||||||
public programId: PublicKey,
|
public programId: PublicKey,
|
||||||
public cluster: Cluster,
|
public cluster: Cluster,
|
||||||
public useIds: boolean,
|
public groupName?: string,
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
/// public
|
/// public
|
||||||
|
@ -1193,7 +1194,6 @@ export class MangoClient {
|
||||||
provider: Provider,
|
provider: Provider,
|
||||||
cluster: Cluster,
|
cluster: Cluster,
|
||||||
programId: PublicKey,
|
programId: PublicKey,
|
||||||
useIds: boolean,
|
|
||||||
): MangoClient {
|
): MangoClient {
|
||||||
// TODO: use IDL on chain or in repository? decide...
|
// TODO: use IDL on chain or in repository? decide...
|
||||||
// Alternatively we could fetch IDL from chain.
|
// Alternatively we could fetch IDL from chain.
|
||||||
|
@ -1204,7 +1204,29 @@ export class MangoClient {
|
||||||
new Program<MangoV4>(idl as MangoV4, programId, provider),
|
new Program<MangoV4>(idl as MangoV4, programId, provider),
|
||||||
programId,
|
programId,
|
||||||
cluster,
|
cluster,
|
||||||
useIds,
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static connectForGroupName(
|
||||||
|
provider: Provider,
|
||||||
|
groupName: string,
|
||||||
|
): MangoClient {
|
||||||
|
// TODO: use IDL on chain or in repository? decide...
|
||||||
|
// Alternatively we could fetch IDL from chain.
|
||||||
|
// const idl = await Program.fetchIdl(MANGO_V4_ID, provider);
|
||||||
|
let idl = IDL;
|
||||||
|
|
||||||
|
const id = Id.fromIds(groupName);
|
||||||
|
|
||||||
|
return new MangoClient(
|
||||||
|
new Program<MangoV4>(
|
||||||
|
idl as MangoV4,
|
||||||
|
new PublicKey(id.publicKey),
|
||||||
|
provider,
|
||||||
|
),
|
||||||
|
new PublicKey(id.publicKey),
|
||||||
|
id.cluster,
|
||||||
|
groupName,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,47 +1,67 @@
|
||||||
import { Cluster, PublicKey } from '@solana/web3.js';
|
import { Cluster, PublicKey } from '@solana/web3.js';
|
||||||
import ids from '../ids.json';
|
import ids from '../ids.json';
|
||||||
import { MANGO_V4_ID } from './constants';
|
|
||||||
|
|
||||||
export class Id {
|
export class Id {
|
||||||
constructor(
|
constructor(
|
||||||
public banks: Map<String, PublicKey>,
|
public cluster: Cluster,
|
||||||
public stubOracles: Map<String, PublicKey>,
|
public name: string,
|
||||||
public mintInfos: Map<String, PublicKey>,
|
public publicKey: string,
|
||||||
public serum3Markets: Map<String, PublicKey>,
|
public serum3ProgramId: string,
|
||||||
public serum3MarketExternals: Map<String, PublicKey>,
|
public mangoProgramId: string,
|
||||||
public perpMarkets: Map<String, PublicKey>,
|
public banks: { name: string; publicKey: string }[],
|
||||||
|
public stubOracles: { name: string; publicKey: string }[],
|
||||||
|
public mintInfos: { name: string; publicKey: string }[],
|
||||||
|
public serum3Markets: {
|
||||||
|
name: string;
|
||||||
|
publicKey: string;
|
||||||
|
marketExternal: string;
|
||||||
|
}[],
|
||||||
|
public perpMarkets: { name: string; publicKey: string }[],
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public getBanks(): PublicKey[] {
|
public getBanks(): PublicKey[] {
|
||||||
return Array.from(this.banks.values());
|
return Array.from(this.banks.map((bank) => new PublicKey(bank.publicKey)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public getStubOracles(): PublicKey[] {
|
public getStubOracles(): PublicKey[] {
|
||||||
return Array.from(this.stubOracles.values());
|
return Array.from(
|
||||||
|
this.stubOracles.map((stubOracle) => new PublicKey(stubOracle.publicKey)),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getMintInfos(): PublicKey[] {
|
public getMintInfos(): PublicKey[] {
|
||||||
return Array.from(this.mintInfos.values());
|
return Array.from(
|
||||||
|
this.mintInfos.map((mintInfo) => new PublicKey(mintInfo.publicKey)),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getSerum3Markets(): PublicKey[] {
|
public getSerum3Markets(): PublicKey[] {
|
||||||
return Array.from(this.serum3Markets.values());
|
return Array.from(
|
||||||
|
this.serum3Markets.map(
|
||||||
|
(serum3Market) => new PublicKey(serum3Market.publicKey),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public getPerpMarkets(): PublicKey[] {
|
public getPerpMarkets(): PublicKey[] {
|
||||||
return Array.from(this.perpMarkets.values());
|
return Array.from(
|
||||||
|
this.perpMarkets.map((perpMarket) => new PublicKey(perpMarket.publicKey)),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static fromIds(cluster: Cluster, programId: PublicKey, group: PublicKey): Id {
|
static fromIds(name: string): Id {
|
||||||
let groupConfig =
|
let groupConfig = ids.groups.find((id) => id['name'] === name);
|
||||||
ids['devnet'][MANGO_V4_ID['devnet'].toBase58()][group.toString()];
|
|
||||||
return new Id(
|
return new Id(
|
||||||
new Map(Object.entries(groupConfig['banks'])),
|
groupConfig.cluster as Cluster,
|
||||||
new Map(Object.entries(groupConfig['stubOracles'])),
|
name,
|
||||||
new Map(Object.entries(groupConfig['mintInfos'])),
|
groupConfig.publicKey,
|
||||||
new Map(Object.entries(groupConfig['serum3Markets'])),
|
groupConfig.serum3ProgramId,
|
||||||
new Map(Object.entries(groupConfig['serum3MarketExternals'])),
|
groupConfig.mangoProgramId,
|
||||||
new Map(Object.entries(groupConfig['perpMarkets'])),
|
groupConfig['banks'],
|
||||||
|
groupConfig['stubOracles'],
|
||||||
|
groupConfig['mintInfos'],
|
||||||
|
groupConfig['serum3Markets'],
|
||||||
|
groupConfig['perpMarkets'],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1875,6 +1875,32 @@ export type MangoV4 = {
|
||||||
],
|
],
|
||||||
"args": []
|
"args": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "computeHealth",
|
||||||
|
"accounts": [
|
||||||
|
{
|
||||||
|
"name": "group",
|
||||||
|
"isMut": false,
|
||||||
|
"isSigner": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "account",
|
||||||
|
"isMut": false,
|
||||||
|
"isSigner": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "healthType",
|
||||||
|
"type": {
|
||||||
|
"defined": "HealthType"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"returns": {
|
||||||
|
"defined": "I80F48"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "benchmark",
|
"name": "benchmark",
|
||||||
"accounts": [],
|
"accounts": [],
|
||||||
|
@ -2267,13 +2293,22 @@ export type MangoV4 = {
|
||||||
"defined": "BookSideType"
|
"defined": "BookSideType"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "padding",
|
||||||
|
"type": {
|
||||||
|
"array": [
|
||||||
|
"u8",
|
||||||
|
3
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "bumpIndex",
|
"name": "bumpIndex",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "freeListLen",
|
"name": "freeListLen",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "freeListHead",
|
"name": "freeListHead",
|
||||||
|
@ -2285,7 +2320,7 @@ export type MangoV4 = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "leafCount",
|
"name": "leafCount",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nodes",
|
"name": "nodes",
|
||||||
|
@ -2660,6 +2695,14 @@ export type MangoV4 = {
|
||||||
"name": "openOrders",
|
"name": "openOrders",
|
||||||
"type": "publicKey"
|
"type": "publicKey"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "previousNativeCoinReserved",
|
||||||
|
"type": "u64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "previousNativePcReserved",
|
||||||
|
"type": "u64"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "marketIndex",
|
"name": "marketIndex",
|
||||||
"type": "u16"
|
"type": "u16"
|
||||||
|
@ -2861,11 +2904,11 @@ export type MangoV4 = {
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "head",
|
"name": "head",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "count",
|
"name": "count",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "seqNum",
|
"name": "seqNum",
|
||||||
|
@ -5124,6 +5167,32 @@ export const IDL: MangoV4 = {
|
||||||
],
|
],
|
||||||
"args": []
|
"args": []
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "computeHealth",
|
||||||
|
"accounts": [
|
||||||
|
{
|
||||||
|
"name": "group",
|
||||||
|
"isMut": false,
|
||||||
|
"isSigner": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "account",
|
||||||
|
"isMut": false,
|
||||||
|
"isSigner": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"args": [
|
||||||
|
{
|
||||||
|
"name": "healthType",
|
||||||
|
"type": {
|
||||||
|
"defined": "HealthType"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"returns": {
|
||||||
|
"defined": "I80F48"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "benchmark",
|
"name": "benchmark",
|
||||||
"accounts": [],
|
"accounts": [],
|
||||||
|
@ -5516,13 +5585,22 @@ export const IDL: MangoV4 = {
|
||||||
"defined": "BookSideType"
|
"defined": "BookSideType"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "padding",
|
||||||
|
"type": {
|
||||||
|
"array": [
|
||||||
|
"u8",
|
||||||
|
3
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "bumpIndex",
|
"name": "bumpIndex",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "freeListLen",
|
"name": "freeListLen",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "freeListHead",
|
"name": "freeListHead",
|
||||||
|
@ -5534,7 +5612,7 @@ export const IDL: MangoV4 = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "leafCount",
|
"name": "leafCount",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nodes",
|
"name": "nodes",
|
||||||
|
@ -5909,6 +5987,14 @@ export const IDL: MangoV4 = {
|
||||||
"name": "openOrders",
|
"name": "openOrders",
|
||||||
"type": "publicKey"
|
"type": "publicKey"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "previousNativeCoinReserved",
|
||||||
|
"type": "u64"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "previousNativePcReserved",
|
||||||
|
"type": "u64"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "marketIndex",
|
"name": "marketIndex",
|
||||||
"type": "u16"
|
"type": "u16"
|
||||||
|
@ -6110,11 +6196,11 @@ export const IDL: MangoV4 = {
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"name": "head",
|
"name": "head",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "count",
|
"name": "count",
|
||||||
"type": "u64"
|
"type": "u32"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "seqNum",
|
"name": "seqNum",
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
import { AnchorProvider, Wallet } from '@project-serum/anchor';
|
import { AnchorProvider, Wallet } from '@project-serum/anchor';
|
||||||
|
|
||||||
import { Connection, Keypair } from '@solana/web3.js';
|
import { Connection, Keypair } from '@solana/web3.js';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import idsJson from '../../ids.json';
|
import idsJson from '../../ids.json';
|
||||||
import { MangoClient } from '../client';
|
import { MangoClient } from '../client';
|
||||||
import { MANGO_V4_ID } from '../constants';
|
import { MANGO_V4_ID, SERUM3_PROGRAM_ID } from '../constants';
|
||||||
import { Id } from '../ids';
|
import { Id } from '../ids';
|
||||||
|
|
||||||
function replacer(key, value) {
|
function replacer(key, value) {
|
||||||
|
@ -15,6 +16,9 @@ function replacer(key, value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
|
const groupName = 'devnet.microwavedcola';
|
||||||
|
const cluster = 'devnet';
|
||||||
|
|
||||||
// build client and fetch group for admin
|
// build client and fetch group for admin
|
||||||
const options = AnchorProvider.defaultOptions();
|
const options = AnchorProvider.defaultOptions();
|
||||||
const connection = new Connection(
|
const connection = new Connection(
|
||||||
|
@ -30,9 +34,8 @@ async function main() {
|
||||||
const userProvider = new AnchorProvider(connection, userWallet, options);
|
const userProvider = new AnchorProvider(connection, userWallet, options);
|
||||||
const client = await MangoClient.connect(
|
const client = await MangoClient.connect(
|
||||||
userProvider,
|
userProvider,
|
||||||
'devnet',
|
cluster,
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID[cluster],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
const admin = Keypair.fromSecretKey(
|
const admin = Keypair.fromSecretKey(
|
||||||
Buffer.from(
|
Buffer.from(
|
||||||
|
@ -54,31 +57,43 @@ async function main() {
|
||||||
|
|
||||||
// build ids
|
// build ids
|
||||||
const toDump = new Id(
|
const toDump = new Id(
|
||||||
new Map(banks.map((tuple) => [tuple.name, tuple.publicKey])),
|
cluster,
|
||||||
new Map(
|
groupName,
|
||||||
stubOracles.map((tuple) => [
|
group.publicKey.toBase58(),
|
||||||
banksMapByMint.get(tuple.mint.toBase58())!.name,
|
SERUM3_PROGRAM_ID[cluster].toBase58(),
|
||||||
tuple.publicKey,
|
MANGO_V4_ID[cluster].toBase58(),
|
||||||
]),
|
banks.map((tuple) => ({
|
||||||
),
|
name: tuple.name,
|
||||||
new Map(
|
publicKey: tuple.publicKey.toBase58(),
|
||||||
mintInfos.map((tuple) => [
|
})),
|
||||||
banksMapByMint.get(tuple.mint.toBase58())!.name,
|
stubOracles.map((tuple) => ({
|
||||||
tuple.publicKey,
|
name: banksMapByMint.get(tuple.mint.toBase58())!.name,
|
||||||
]),
|
publicKey: tuple.publicKey.toBase58(),
|
||||||
),
|
})),
|
||||||
new Map(serum3Markets.map((tuple) => [tuple.name, tuple.publicKey])),
|
mintInfos.map((tuple) => ({
|
||||||
new Map(
|
name: banksMapByMint.get(tuple.mint.toBase58())!.name,
|
||||||
serum3Markets.map((tuple) => [tuple.name, tuple.serumMarketExternal]),
|
publicKey: tuple.publicKey.toBase58(),
|
||||||
),
|
})),
|
||||||
new Map(perpMarkets.map((tuple) => [tuple.name, tuple.publicKey])),
|
serum3Markets.map((tuple) => ({
|
||||||
|
name: tuple.name,
|
||||||
|
publicKey: tuple.publicKey.toBase58(),
|
||||||
|
marketExternal: tuple.serumMarketExternal.toBase58(),
|
||||||
|
})),
|
||||||
|
perpMarkets.map((tuple) => ({
|
||||||
|
name: tuple.name,
|
||||||
|
publicKey: tuple.publicKey.toBase58(),
|
||||||
|
})),
|
||||||
);
|
);
|
||||||
|
|
||||||
// adds ids for group in existing ids.json
|
// adds ids for group in existing ids.json
|
||||||
idsJson['devnet'][MANGO_V4_ID['devnet'].toBase58()] = {};
|
const existingGroup = idsJson.groups.find((group) => group.name == groupName);
|
||||||
idsJson['devnet'][MANGO_V4_ID['devnet'].toBase58()][
|
if (existingGroup) {
|
||||||
group.publicKey.toBase58()
|
console.log('Updating existing group with latest state...');
|
||||||
] = toDump;
|
} else {
|
||||||
|
console.log('Group does not exist yet...');
|
||||||
|
}
|
||||||
|
idsJson.groups = idsJson.groups.filter((group) => group.name !== groupName);
|
||||||
|
idsJson.groups.push(toDump);
|
||||||
|
|
||||||
// dump
|
// dump
|
||||||
const file = `${process.cwd()}/ts/client/ids.json`;
|
const file = `${process.cwd()}/ts/client/ids.json`;
|
||||||
|
|
|
@ -27,7 +27,6 @@ async function main() {
|
||||||
adminProvider,
|
adminProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const group = await client.getGroupForAdmin(admin.publicKey);
|
const group = await client.getGroupForAdmin(admin.publicKey);
|
||||||
|
|
|
@ -48,7 +48,6 @@ async function main() {
|
||||||
adminProvider,
|
adminProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
// group
|
// group
|
||||||
|
@ -99,7 +98,9 @@ async function main() {
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
const usdcDevnetOracle = (await client.getStubOracle(group, usdcDevnetMint))[0];
|
const usdcDevnetOracle = (
|
||||||
|
await client.getStubOracle(group, usdcDevnetMint)
|
||||||
|
)[0];
|
||||||
console.log(`...created stub oracle ${usdcDevnetOracle.publicKey}`);
|
console.log(`...created stub oracle ${usdcDevnetOracle.publicKey}`);
|
||||||
try {
|
try {
|
||||||
await client.tokenRegister(
|
await client.tokenRegister(
|
||||||
|
|
|
@ -2,7 +2,6 @@ import { AnchorProvider, Wallet } from '@project-serum/anchor';
|
||||||
import { Connection, Keypair } from '@solana/web3.js';
|
import { Connection, Keypair } from '@solana/web3.js';
|
||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { MangoClient } from '../client';
|
import { MangoClient } from '../client';
|
||||||
import { MANGO_V4_ID } from '../constants';
|
|
||||||
|
|
||||||
async function main() {
|
async function main() {
|
||||||
const options = AnchorProvider.defaultOptions();
|
const options = AnchorProvider.defaultOptions();
|
||||||
|
@ -18,11 +17,9 @@ async function main() {
|
||||||
);
|
);
|
||||||
const userWallet = new Wallet(user);
|
const userWallet = new Wallet(user);
|
||||||
const userProvider = new AnchorProvider(connection, userWallet, options);
|
const userProvider = new AnchorProvider(connection, userWallet, options);
|
||||||
const client = await MangoClient.connect(
|
const client = await MangoClient.connectForGroupName(
|
||||||
userProvider,
|
userProvider,
|
||||||
'devnet',
|
'devnet.microwavedcola' /* Use ids json instead of getProgramAccounts */,
|
||||||
MANGO_V4_ID['devnet'],
|
|
||||||
true /* Use ids json instead of getProgramAccounts */,
|
|
||||||
);
|
);
|
||||||
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,6 @@ async function main() {
|
||||||
userProvider,
|
userProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ async function main() {
|
||||||
user1Provider,
|
user1Provider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
console.log(`user1 ${user1Wallet.publicKey.toBase58()}`);
|
console.log(`user1 ${user1Wallet.publicKey.toBase58()}`);
|
||||||
|
|
||||||
|
@ -64,7 +63,6 @@ async function main() {
|
||||||
user2Provider,
|
user2Provider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
console.log(`user2 ${user2Wallet.publicKey.toBase58()}`);
|
console.log(`user2 ${user2Wallet.publicKey.toBase58()}`);
|
||||||
|
|
||||||
|
@ -111,7 +109,6 @@ async function main() {
|
||||||
adminProvider,
|
adminProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
await client.setStubOracle(group, group.banksMap.get('USDC')?.oracle!, 0.5);
|
await client.setStubOracle(group, group.banksMap.get('USDC')?.oracle!, 0.5);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ async function main() {
|
||||||
userProvider,
|
userProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ async function main() {
|
||||||
userProvider,
|
userProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
console.log(`User ${userWallet.publicKey.toBase58()}`);
|
||||||
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ const main = async () => {
|
||||||
adminProvider,
|
adminProvider,
|
||||||
'devnet',
|
'devnet',
|
||||||
MANGO_V4_ID['devnet'],
|
MANGO_V4_ID['devnet'],
|
||||||
false,
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const btcMint = new PublicKey('3UNBZ6o52WTWwjac2kPUb4FyodhU1vFkRJheu1Sh2TvU');
|
const btcMint = new PublicKey('3UNBZ6o52WTWwjac2kPUb4FyodhU1vFkRJheu1Sh2TvU');
|
||||||
|
|
Loading…
Reference in New Issue