explorer: Show token delta when token account is closed (#28136)

This commit is contained in:
Justin Starry 2022-09-29 20:06:41 +08:00 committed by GitHub
parent 816940c263
commit 7abc322b41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 30 additions and 6 deletions

View File

@ -97,27 +97,51 @@ export function generateTokenBalanceRows(
accounts: ParsedMessageAccount[] accounts: ParsedMessageAccount[]
): TokenBalanceRow[] { ): TokenBalanceRow[] {
let preBalanceMap: { [index: number]: TokenBalance } = {}; let preBalanceMap: { [index: number]: TokenBalance } = {};
let postBalanceMap: { [index: number]: TokenBalance } = {};
preTokenBalances.forEach( preTokenBalances.forEach(
(balance) => (preBalanceMap[balance.accountIndex] = balance) (balance) => (preBalanceMap[balance.accountIndex] = balance)
); );
postTokenBalances.forEach(
(balance) => (postBalanceMap[balance.accountIndex] = balance)
);
// Check if any pre token balances do not have corresponding
// post token balances. If not, insert a post balance of zero
// so that the delta is displayed properly
for (let index in preBalanceMap) {
const preBalance = preBalanceMap[index];
if (!postBalanceMap[index]) {
postBalanceMap[index] = {
accountIndex: Number(index),
mint: preBalance.mint,
uiTokenAmount: {
amount: "0",
decimals: preBalance.uiTokenAmount.decimals,
uiAmount: null,
uiAmountString: "0",
},
};
}
}
let rows: TokenBalanceRow[] = []; let rows: TokenBalanceRow[] = [];
postTokenBalances.forEach(({ uiTokenAmount, accountIndex, mint }) => { for (let index in postBalanceMap) {
const { uiTokenAmount, accountIndex, mint } = postBalanceMap[index];
const preBalance = preBalanceMap[accountIndex]; const preBalance = preBalanceMap[accountIndex];
const account = accounts[accountIndex].pubkey; const account = accounts[accountIndex].pubkey;
if (!uiTokenAmount.uiAmountString) { if (!uiTokenAmount.uiAmountString) {
// uiAmount deprecation // uiAmount deprecation
return; continue;
} }
// case where mint changes // case where mint changes
if (preBalance && preBalance.mint !== mint) { if (preBalance && preBalance.mint !== mint) {
if (!preBalance.uiTokenAmount.uiAmountString) { if (!preBalance.uiTokenAmount.uiAmountString) {
// uiAmount deprecation // uiAmount deprecation
return; continue;
} }
rows.push({ rows.push({
@ -139,7 +163,7 @@ export function generateTokenBalanceRows(
delta: new BigNumber(uiTokenAmount.uiAmountString), delta: new BigNumber(uiTokenAmount.uiAmountString),
mint: mint, mint: mint,
}); });
return; continue;
} }
let delta; let delta;
@ -147,7 +171,7 @@ export function generateTokenBalanceRows(
if (preBalance) { if (preBalance) {
if (!preBalance.uiTokenAmount.uiAmountString) { if (!preBalance.uiTokenAmount.uiAmountString) {
// uiAmount deprecation // uiAmount deprecation
return; continue;
} }
delta = new BigNumber(uiTokenAmount.uiAmountString).minus( delta = new BigNumber(uiTokenAmount.uiAmountString).minus(
@ -164,7 +188,7 @@ export function generateTokenBalanceRows(
delta, delta,
accountIndex, accountIndex,
}); });
}); }
return rows.sort((a, b) => a.accountIndex - b.accountIndex); return rows.sort((a, b) => a.accountIndex - b.accountIndex);
} }