mango-transaction-scraper/src/maps.ts

93 lines
3.2 KiB
TypeScript

import { IDS} from '@blockworks-foundation/mango-client';
import { PublicKey} from '@solana/web3.js';
export async function createReverseIdsMap(cluster, client, connection) {
let reverseIds = {}
let ids = IDS;
// vault - symbol map
let vaultSymbolMap = {};
for (let mangoGroupName in ids[cluster].mango_groups) {
let mangoGroupObj = ids[cluster].mango_groups[mangoGroupName]
for (let symbol in mangoGroupObj.symbols) {
let mintPk = mangoGroupObj.symbols[symbol];
let mintIndex = mangoGroupObj.mint_pks.indexOf(mintPk);
let vaultPk = mangoGroupObj.vault_pks[mintIndex];
vaultSymbolMap[vaultPk] = symbol;
}
}
reverseIds['vault_symbol'] = vaultSymbolMap;
// oracles - symbol map
let oracleSymbolMap = {};
for (let mangoGroupName in ids[cluster].mango_groups) {
let mangoGroupObj = ids[cluster].mango_groups[mangoGroupName]
for (let symbol in mangoGroupObj.symbols) {
let mintPk = mangoGroupObj.symbols[symbol];
let mintIndex = mangoGroupObj.mint_pks.indexOf(mintPk);
// There are one less oracle than the number of tokens in the mango group
if (mintIndex < mangoGroupObj.mint_pks.length - 1) {
let oraclePk = mangoGroupObj.oracle_pks[mintIndex];
oracleSymbolMap[oraclePk] = symbol;
}
}
}
reverseIds['oracle_symbol'] = oracleSymbolMap;
// mangoGroup - symbols-array map
let mangoGroupMap = {};
for (let mangoGroupName in ids[cluster].mango_groups) {
let mangoGroupObj = ids[cluster].mango_groups[mangoGroupName]
let mangoGroupPk = mangoGroupObj["mango_group_pk"]
mangoGroupMap[mangoGroupPk] = {};
let symbols: string[] = []
for (let mintPk of mangoGroupObj.mint_pks) {
for (let symbol of Object.keys(mangoGroupObj.symbols)) {
if (mangoGroupObj.symbols[symbol] === mintPk) {
symbols.push(symbol)
}
}
}
let oracles = {}
for (let i = 0; i < mangoGroupObj.oracle_pks.length; i++) {
oracles[symbols[i]] = mangoGroupObj.oracle_pks[i]
}
mangoGroupMap[mangoGroupPk]['symbols'] = symbols
mangoGroupMap[mangoGroupPk]['oracles'] = oracles
}
reverseIds['mango_groups'] = mangoGroupMap;
let oracleDecimalsMap = {};
for (let mangoGroupName in ids[cluster].mango_groups) {
let mangoGroupObj = ids[cluster].mango_groups[mangoGroupName]
let mangoGroupPk = mangoGroupObj.mango_group_pk;
let mangoGroup = await client.getMangoGroup(connection, new PublicKey(mangoGroupPk));
for (let i = 0; i < mangoGroup.oracles.length; i++) {
oracleDecimalsMap[mangoGroup.oracles[i].toBase58()] = mangoGroup.oracleDecimals[i]
}
let symbols = reverseIds['mango_groups'][mangoGroupPk].symbols;
let map = {}
for (let i = 0; i < symbols.length; i++) {
map[symbols[i]] = mangoGroup.mintDecimals[i]
}
reverseIds['mango_groups'][mangoGroupPk]['mint_decimals'] = map;
}
reverseIds['oracle_decimals'] = oracleDecimalsMap;
return reverseIds
}