support setting delegate
Signed-off-by: microwavedcola1 <microwavedcola@gmail.com>
This commit is contained in:
parent
44f103596b
commit
70b3c3f202
|
@ -7,6 +7,7 @@ All environment variables are optional.
|
||||||
* PORT - port on which expressjs webserver runs, default is 3000
|
* PORT - port on which expressjs webserver runs, default is 3000
|
||||||
* CLUSTER_URL - RPC node url e.g., default is scheduled rotation between https://api.mainnet-beta.solana.com, https://lokidfxnwlabdq.main.genesysgo.net:8899/,
|
* CLUSTER_URL - RPC node url e.g., default is scheduled rotation between https://api.mainnet-beta.solana.com, https://lokidfxnwlabdq.main.genesysgo.net:8899/,
|
||||||
https://solana-api.projectserum.com/
|
https://solana-api.projectserum.com/
|
||||||
|
* MANGO_ACCOUNT - public key of mango account to explicitly choose, in case an owner has multiple mango accounts, or PRIVATE_KEY_PATH is a delegate
|
||||||
|
|
||||||
# How to run while developing
|
# How to run while developing
|
||||||
* `yarn install`
|
* `yarn install`
|
||||||
|
|
|
@ -93,57 +93,63 @@ class MangoSimpleClient {
|
||||||
JSON.parse(fs.readFileSync(privateKeyPath, "utf-8"))
|
JSON.parse(fs.readFileSync(privateKeyPath, "utf-8"))
|
||||||
);
|
);
|
||||||
|
|
||||||
logger.info(`- fetching mango accounts for ${owner.publicKey.toBase58()}`);
|
let mangoAccount;
|
||||||
let mangoAccounts;
|
|
||||||
try {
|
|
||||||
mangoAccounts = await mangoClient.getMangoAccountsForOwner(
|
|
||||||
mangoGroup,
|
|
||||||
owner.publicKey
|
|
||||||
);
|
|
||||||
} catch (error) {
|
|
||||||
logger.error(
|
|
||||||
`- error retrieving mango accounts for ${owner.publicKey.toBase58()}`
|
|
||||||
);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mangoAccounts.length) {
|
|
||||||
logger.error(`- no mango account found ${owner.publicKey.toBase58()}`);
|
|
||||||
process.exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
const sortedMangoAccounts = mangoAccounts
|
|
||||||
.slice()
|
|
||||||
.sort((a, b) =>
|
|
||||||
a.publicKey.toBase58() > b.publicKey.toBase58() ? 1 : -1
|
|
||||||
);
|
|
||||||
|
|
||||||
let chosenMangoAccount;
|
|
||||||
if (process.env.MANGO_ACCOUNT) {
|
if (process.env.MANGO_ACCOUNT) {
|
||||||
const filteredMangoAccounts = sortedMangoAccounts.filter(
|
logger.info(
|
||||||
(mangoAccount) =>
|
`- MANGO_ACCOUNT explicitly specified, fetching mango account ${process.env.MANGO_ACCOUNT}`
|
||||||
mangoAccount.publicKey.toBase58() === process.env.MANGO_ACCOUNT
|
|
||||||
);
|
);
|
||||||
if (!filteredMangoAccounts.length) {
|
mangoAccount = await mangoClient.getMangoAccount(
|
||||||
|
new PublicKey(process.env.MANGO_ACCOUNT),
|
||||||
|
mangoGroupConfig.serumProgramId
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
logger.info(
|
||||||
|
`- fetching mango accounts for ${owner.publicKey.toBase58()}`
|
||||||
|
);
|
||||||
|
let mangoAccounts;
|
||||||
|
try {
|
||||||
|
mangoAccounts = await mangoClient.getMangoAccountsForOwner(
|
||||||
|
mangoGroup,
|
||||||
|
owner.publicKey
|
||||||
|
);
|
||||||
|
} catch (error) {
|
||||||
logger.error(
|
logger.error(
|
||||||
`- no mango account found for key ${process.env.MANGO_ACCOUNT}`
|
`- error retrieving mango accounts for ${owner.publicKey.toBase58()}`
|
||||||
);
|
);
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
chosenMangoAccount = filteredMangoAccounts[0];
|
|
||||||
} else {
|
if (!mangoAccounts.length) {
|
||||||
chosenMangoAccount = sortedMangoAccounts[0];
|
logger.error(`- no mango account found ${owner.publicKey.toBase58()}`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortedMangoAccounts = mangoAccounts
|
||||||
|
.slice()
|
||||||
|
.sort((a, b) =>
|
||||||
|
a.publicKey.toBase58() > b.publicKey.toBase58() ? 1 : -1
|
||||||
|
);
|
||||||
|
|
||||||
|
// just select first arbitrarily
|
||||||
|
mangoAccount = sortedMangoAccounts[0];
|
||||||
|
|
||||||
|
const debugAccounts = sortedMangoAccounts
|
||||||
|
.map((mangoAccount) => mangoAccount.publicKey.toBase58())
|
||||||
|
.join(", ");
|
||||||
|
logger.info(
|
||||||
|
`- found mango accounts ${debugAccounts}, using ${mangoAccount.publicKey.toBase58()}`
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
const debugAccounts = sortedMangoAccounts
|
if (mangoAccount.owner.toBase58() !== owner.publicKey.toBase58()) {
|
||||||
.map((mangoAccount) => mangoAccount.publicKey.toBase58())
|
logger.info(
|
||||||
.join(", ");
|
`- Note: ${owner.publicKey.toBase58()} is a delegate for ${mangoAccount.publicKey.toBase58()}`
|
||||||
logger.info(
|
);
|
||||||
`- found mango accounts ${debugAccounts}, using ${chosenMangoAccount.publicKey.toBase58()}`
|
}
|
||||||
);
|
|
||||||
|
|
||||||
// load open orders accounts, used by e.g. getSpotOpenOrdersAccountForMarket
|
// load open orders accounts, used by e.g. getSpotOpenOrdersAccountForMarket
|
||||||
await chosenMangoAccount.loadOpenOrders(
|
await mangoAccount.loadOpenOrders(
|
||||||
connection,
|
connection,
|
||||||
new PublicKey(mangoGroupConfig.serumProgramId)
|
new PublicKey(mangoGroupConfig.serumProgramId)
|
||||||
);
|
);
|
||||||
|
@ -154,7 +160,7 @@ class MangoSimpleClient {
|
||||||
mangoGroupConfig,
|
mangoGroupConfig,
|
||||||
mangoGroup,
|
mangoGroup,
|
||||||
owner,
|
owner,
|
||||||
chosenMangoAccount
|
mangoAccount
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue