Merge pull request #4 from blockworks-foundation/ts/anchorevents
Ts/anchorevents
This commit is contained in:
commit
0d93e12851
|
@ -23,6 +23,7 @@ var tokenIndexesMap = {
|
||||||
5: 'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt',
|
5: 'SRMuApVNdxXokk5GT7XD5cUUgXMBCoAz2LHeuAoKWRt',
|
||||||
6: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
|
6: '4k3Dyjzvzp8eMZWUXbBCjEvwSkkk59S5iCNLY3QrkX6R',
|
||||||
7: '8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh',
|
7: '8HGyAAB1yoM1ttS7pXjHMa3dukTFGQggnFFH3hJZgzQh',
|
||||||
|
8: 'AGFEad2et2ZJif9jaGpdMixQqvW5i81aBdvKe7PHNfz3',
|
||||||
15: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
15: 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v',
|
||||||
},
|
},
|
||||||
'4yJ2Vx3kZnmHTNCrHzdoj5nCwriF2kVhfKNvqC6gU8tr': {
|
'4yJ2Vx3kZnmHTNCrHzdoj5nCwriF2kVhfKNvqC6gU8tr': {
|
||||||
|
@ -47,6 +48,8 @@ var tokenIndexesMap = {
|
||||||
5: '3NBReDRTLKMQEKiLD5tGcx4kXbTf88b7f2xLS9UuGjym',
|
5: '3NBReDRTLKMQEKiLD5tGcx4kXbTf88b7f2xLS9UuGjym',
|
||||||
6: 'AnLf8tVYCM816gmBjiy8n53eXKKEDydT5piYjjQDPgTB',
|
6: 'AnLf8tVYCM816gmBjiy8n53eXKKEDydT5piYjjQDPgTB',
|
||||||
7: '9xYBiDWYsh2fHzpsz3aaCnNHCKWBNtfEDLtU6kS4aFD9',
|
7: '9xYBiDWYsh2fHzpsz3aaCnNHCKWBNtfEDLtU6kS4aFD9',
|
||||||
|
8: '8JPJJkmDScpcNmBRKGZuPuG2GYAveQgP3t5gFuMymwvF',
|
||||||
|
9: '3pyn4svBbxJ9Wnn3RVeafyLWfzie6yC5eTig2S62v9SC'
|
||||||
},
|
},
|
||||||
'4yJ2Vx3kZnmHTNCrHzdoj5nCwriF2kVhfKNvqC6gU8tr': {
|
'4yJ2Vx3kZnmHTNCrHzdoj5nCwriF2kVhfKNvqC6gU8tr': {
|
||||||
0: '49cnp1ejyvQi3CJw3kKXNCDGnNbWDuZd3UG3Y2zGvQkX',
|
0: '49cnp1ejyvQi3CJw3kKXNCDGnNbWDuZd3UG3Y2zGvQkX',
|
||||||
|
@ -62,13 +65,45 @@ var tokenIndexesMap = {
|
||||||
// mango group -> perp name -> lot sizes
|
// mango group -> perp name -> lot sizes
|
||||||
var perpLotSizes = {
|
var perpLotSizes = {
|
||||||
'98pjRuQjK3qA6gXts96PqZT4Ze5QmnCmt3QYjhbUSPue': {
|
'98pjRuQjK3qA6gXts96PqZT4Ze5QmnCmt3QYjhbUSPue': {
|
||||||
|
'MNGO-PERP': {
|
||||||
|
'pk': '4nfmQP3KmUqEJ6qJLsS3offKgE96YUB4Rp7UQvm2Fbi9',
|
||||||
|
'baseLotSize': 1000000,
|
||||||
|
'quoteLotSize': 100
|
||||||
|
},
|
||||||
'BTC-PERP': {
|
'BTC-PERP': {
|
||||||
|
'pk': 'DtEcjPLyD4YtTBB4q8xwFZ9q49W89xZCZtJyrGebi5t8',
|
||||||
'baseLotSize': 100,
|
'baseLotSize': 100,
|
||||||
'quoteLotSize': 10
|
'quoteLotSize': 10
|
||||||
},
|
},
|
||||||
|
'ETH-PERP': {
|
||||||
|
'pk': 'DVXWg6mfwFvHQbGyaHke4h3LE9pSkgbooDSDgA4JBC8d',
|
||||||
|
'baseLotSize': 1000,
|
||||||
|
'quoteLotSize': 100
|
||||||
|
},
|
||||||
'SOL-PERP': {
|
'SOL-PERP': {
|
||||||
|
'pk': '2TgaaVoHgnSeEtXvWTx13zQeTf4hYWAMEiMQdcG6EwHi',
|
||||||
'baseLotSize': 10000000,
|
'baseLotSize': 10000000,
|
||||||
'quoteLotSize': 100
|
'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
|
blockDatetime
|
||||||
);
|
);
|
||||||
parsedTransactions.perp_bankruptcy.push(perpBankruptcyRow);
|
parsedTransactions.perp_bankruptcy.push(perpBankruptcyRow);
|
||||||
parsedTransactions.updating_funding.push(updateFundingRow);
|
parsedTransactions.funding.push(updateFundingRow);
|
||||||
} else if (eventName === "SettlePnlLog") {
|
} else if (eventName === "SettlePnlLog") {
|
||||||
parsedTransactions.settle_pnl.push(
|
parsedTransactions.settle_pnl.push(
|
||||||
...parseSettlePnl(
|
...parseSettlePnl(
|
||||||
|
@ -266,16 +301,18 @@ export function anchorParser(parsedTransactions, result, signature, blockTime, s
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
} else if (eventName === "CachePerpMarketsLog") {
|
} else if (eventName === "CachePerpMarketsLog") {
|
||||||
parsedTransactions.funding.push(
|
// pass - logging from CachePerpMarkets is redundant - can just log from updateFunding
|
||||||
...parseCachePerpMarkets(
|
|
||||||
eventNum,
|
// parsedTransactions.funding.push(
|
||||||
eventData,
|
// ...parseCachePerpMarkets(
|
||||||
signature,
|
// eventNum,
|
||||||
blockTime,
|
// eventData,
|
||||||
slot,
|
// signature,
|
||||||
blockDatetime
|
// blockTime,
|
||||||
)
|
// slot,
|
||||||
)
|
// blockDatetime
|
||||||
|
// )
|
||||||
|
// )
|
||||||
} else if (eventName === "OpenOrdersBalanceLog") {
|
} else if (eventName === "OpenOrdersBalanceLog") {
|
||||||
parsedTransactions.open_orders_balances.push(
|
parsedTransactions.open_orders_balances.push(
|
||||||
parseOpenOrdersBalance(
|
parseOpenOrdersBalance(
|
||||||
|
@ -1147,9 +1184,16 @@ function parseFillLog(
|
||||||
) {
|
) {
|
||||||
let mangoGroupPk = eventData.mangoGroup.toString();
|
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)[
|
let tokens = ids["groups"].find((e) => e["publicKey"] === mangoGroupPk)[
|
||||||
"tokens"
|
"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)[
|
let oracles = ids["groups"].find((e) => e["publicKey"] === mangoGroupPk)[
|
||||||
"oracles"
|
"oracles"
|
||||||
];
|
];
|
||||||
|
@ -1169,8 +1213,7 @@ function parseFillLog(
|
||||||
let oracle = oracles.find((e) => e["publicKey"] === oraclePk);
|
let oracle = oracles.find((e) => e["publicKey"] === oraclePk);
|
||||||
let symbol = oracle.symbol;
|
let symbol = oracle.symbol;
|
||||||
|
|
||||||
let token = tokens.find((e) => e.symbol === symbol);
|
let baseDecimals = symbolDecimalsMap[symbol]
|
||||||
let baseDecimals = token.decimals;
|
|
||||||
|
|
||||||
let rawPrice = oraclePrices[i];
|
let rawPrice = oraclePrices[i];
|
||||||
let price = rawPrice
|
let price = rawPrice
|
||||||
|
@ -1213,7 +1256,7 @@ function parseFillLog(
|
||||||
return {
|
return {
|
||||||
symbol: perpMarketConfig.baseSymbol,
|
symbol: perpMarketConfig.baseSymbol,
|
||||||
long_funding: new I80F48(eventData.longFunding).toNumber(),
|
long_funding: new I80F48(eventData.longFunding).toNumber(),
|
||||||
short_funding: new I80F48(eventData.longFunding).toNumber(),
|
short_funding: new I80F48(eventData.shortFunding).toNumber(),
|
||||||
instruction_num: instructionNum,
|
instruction_num: instructionNum,
|
||||||
mango_group: eventData.mangoGroup.toString(),
|
mango_group: eventData.mangoGroup.toString(),
|
||||||
block_datetime: blockDatetime,
|
block_datetime: blockDatetime,
|
||||||
|
|
|
@ -63,8 +63,11 @@ export function parseTransactions(transactionsResult, mangoProgramId) {
|
||||||
|
|
||||||
// only look at cases where instruction is for mango program id
|
// only look at cases where instruction is for mango program id
|
||||||
// Skip attempting to parse serum instructions, etc
|
// 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;
|
||||||
let instructions = result.transaction.message.instructions.filter(
|
let innerInstructions = result.meta.innerInstructions.map(e => e.instructions).flat();
|
||||||
|
instructions.push(...innerInstructions)
|
||||||
|
|
||||||
|
instructions = instructions.filter(
|
||||||
(ix) =>
|
(ix) =>
|
||||||
ix.programId === mangoProgramId &&
|
ix.programId === mangoProgramId &&
|
||||||
!(
|
!(
|
||||||
|
|
Loading…
Reference in New Issue