Merge pull request #4 from blockworks-foundation/ts/anchorevents

Ts/anchorevents
This commit is contained in:
Nicholas Clarke 2021-11-06 23:09:52 -07:00 committed by GitHub
commit 0d93e12851
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 63 additions and 17 deletions

View File

@ -23,6 +23,7 @@ var tokenIndexesMap = {
5: 'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt',
6: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
7: '8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh',
8: 'AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3',
15: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
},
'4yJ2Vx3kZnmHTNCrHzdoj5nCwriF2kVhfKNvqC6gU8tr': {
@ -47,6 +48,8 @@ var tokenIndexesMap = {
5: '3NBReDRTLKMQEKiLD5tGcx4kXbTf88b7f2xLS9UuGjym',
6: 'AnLf8tVYCM816gmBjiy8n53eXKKEDydT5piYjjQDPgTB',
7: '9xYBiDWYsh2fHzpsz3aaCnNHCKWBNtfEDLtU6kS4aFD9',
8: '8JPJJkmDScpcNmBRKGZuPuG2GYAveQgP3t5gFuMymwvF',
9: '3pyn4svBbxJ9Wnn3RVeafyLWfzie6yC5eTig2S62v9SC'
},
'4yJ2Vx3kZnmHTNCrHzdoj5nCwriF2kVhfKNvqC6gU8tr': {
0: '49cnp1ejyvQi3CJw3kKXNCDGnNbWDuZd3UG3Y2zGvQkX',
@ -62,13 +65,45 @@ var tokenIndexesMap = {
// mango group -> perp name -> lot sizes
var perpLotSizes = {
'98pjRuQjK3qA6gXts96PqZT4Ze5QmnCmt3QYjhbUSPue': {
'MNGO-PERP': {
'pk': '4nfmQP3KmUqEJ6qJLsS3offKgE96YUB4Rp7UQvm2Fbi9',
'baseLotSize': 1000000,
'quoteLotSize': 100
},
'BTC-PERP': {
'pk': 'DtEcjPLyD4YtTBB4q8xwFZ9q49W89xZCZtJyrGebi5t8',
'baseLotSize': 100,
'quoteLotSize': 10
},
'ETH-PERP': {
'pk': 'DVXWg6mfwFvHQbGyaHke4h3LE9pSkgbooDSDgA4JBC8d',
'baseLotSize': 1000,
'quoteLotSize': 100
},
'SOL-PERP': {
'pk': '2TgaaVoHgnSeEtXvWTx13zQeTf4hYWAMEiMQdcG6EwHi',
'baseLotSize': 10000000,
'quoteLotSize': 100
},
'SRM-PERP': {
'pk': '4GkJj2znAr2pE2PBbak66E12zjCs2jkmeafiJwDVM9Au',
'baseLotSize': 100000,
'quoteLotSize': 100
},
'RAY-PERP': {
'pk': '6WGoQr5mJAEpYCdX6qjju2vEnJuD7e8ZeYes7X7Shi7E',
'baseLotSize': 100000,
'quoteLotSize': 100
},
'FTT-PERP': {
'pk': 'AhgEayEGNw46ALHuC5ASsKyfsJzAm5JY8DWqpGMQhcGC',
'baseLotSize': 100000,
'quoteLotSize': 100
},
'ADA-PERP': {
'pk': 'Bh9UENAncoTEwE7NDim8CdeM1GPvw6xAT4Sih2rKVmWB',
'baseLotSize': 1000000,
'quoteLotSize': 100
}
}
}
@ -220,7 +255,7 @@ export function anchorParser(parsedTransactions, result, signature, blockTime, s
blockDatetime
);
parsedTransactions.perp_bankruptcy.push(perpBankruptcyRow);
parsedTransactions.updating_funding.push(updateFundingRow);
parsedTransactions.funding.push(updateFundingRow);
} else if (eventName === "SettlePnlLog") {
parsedTransactions.settle_pnl.push(
...parseSettlePnl(
@ -266,16 +301,18 @@ export function anchorParser(parsedTransactions, result, signature, blockTime, s
)
)
} else if (eventName === "CachePerpMarketsLog") {
parsedTransactions.funding.push(
...parseCachePerpMarkets(
eventNum,
eventData,
signature,
blockTime,
slot,
blockDatetime
)
)
// pass - logging from CachePerpMarkets is redundant - can just log from updateFunding
// parsedTransactions.funding.push(
// ...parseCachePerpMarkets(
// eventNum,
// eventData,
// signature,
// blockTime,
// slot,
// blockDatetime
// )
// )
} else if (eventName === "OpenOrdersBalanceLog") {
parsedTransactions.open_orders_balances.push(
parseOpenOrdersBalance(
@ -1147,9 +1184,16 @@ function parseFillLog(
) {
let mangoGroupPk = eventData.mangoGroup.toString();
// Some symbols may only exist in tokens or perpMarkets but not both (such as ADA)
let tokens = ids["groups"].find((e) => e["publicKey"] === mangoGroupPk)[
"tokens"
];
let perpMarkets = ids["groups"].find((e) => e["publicKey"] === mangoGroupPk)[
"perpMarkets"
]
let symbolDecimalsMap = Object.fromEntries(tokens.map(e => [e.symbol, e.decimals]).concat(perpMarkets.map(e => [e.baseSymbol, e.baseDecimals])))
let oracles = ids["groups"].find((e) => e["publicKey"] === mangoGroupPk)[
"oracles"
];
@ -1169,8 +1213,7 @@ function parseFillLog(
let oracle = oracles.find((e) => e["publicKey"] === oraclePk);
let symbol = oracle.symbol;
let token = tokens.find((e) => e.symbol === symbol);
let baseDecimals = token.decimals;
let baseDecimals = symbolDecimalsMap[symbol]
let rawPrice = oraclePrices[i];
let price = rawPrice
@ -1209,11 +1252,11 @@ function parseFillLog(
const perpMarketConfig = groupConfig.perpMarkets.find(
(p) => p.marketIndex === eventData.marketIndex.toNumber()
) as PerpMarketConfig;
return {
symbol: perpMarketConfig.baseSymbol,
long_funding: new I80F48(eventData.longFunding).toNumber(),
short_funding: new I80F48(eventData.longFunding).toNumber(),
short_funding: new I80F48(eventData.shortFunding).toNumber(),
instruction_num: instructionNum,
mango_group: eventData.mangoGroup.toString(),
block_datetime: blockDatetime,

View File

@ -63,8 +63,11 @@ export function parseTransactions(transactionsResult, mangoProgramId) {
// only look at cases where instruction is for mango program id
// Skip attempting to parse serum instructions, etc
// @clarkeni - what if someone calls mango program via CPI? Do the instruction list contain inner instructions
let instructions = result.transaction.message.instructions.filter(
let instructions = result.transaction.message.instructions;
let innerInstructions = result.meta.innerInstructions.map(e => e.instructions).flat();
instructions.push(...innerInstructions)
instructions = instructions.filter(
(ix) =>
ix.programId === mangoProgramId &&
!(