rpc: Parse largest token accounts after sorting & truncating (#35264)
This commit is contained in:
parent
b0134ab04d
commit
6d15487183
|
@ -1861,29 +1861,18 @@ impl JsonRpcRequestProcessor {
|
||||||
"Invalid param: not a Token mint".to_string(),
|
"Invalid param: not a Token mint".to_string(),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
let mut token_balances: Vec<RpcTokenAccountBalance> = self
|
let mut token_balances: Vec<_> = self
|
||||||
.get_filtered_spl_token_accounts_by_mint(&bank, &mint_owner, mint, vec![])?
|
.get_filtered_spl_token_accounts_by_mint(&bank, &mint_owner, mint, vec![])?
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(address, account)| {
|
.map(|(address, account)| {
|
||||||
let amount = StateWithExtensions::<TokenAccount>::unpack(account.data())
|
let amount = StateWithExtensions::<TokenAccount>::unpack(account.data())
|
||||||
.map(|account| account.base.amount)
|
.map(|account| account.base.amount)
|
||||||
.unwrap_or(0);
|
.unwrap_or(0);
|
||||||
let amount = token_amount_to_ui_amount(amount, decimals);
|
(address, amount)
|
||||||
RpcTokenAccountBalance {
|
|
||||||
address: address.to_string(),
|
|
||||||
amount,
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.collect();
|
.collect();
|
||||||
|
|
||||||
let sort_largest = |a: &RpcTokenAccountBalance, b: &RpcTokenAccountBalance| {
|
let sort_largest = |a: &(_, u64), b: &(_, u64)| b.1.cmp(&a.1);
|
||||||
a.amount
|
|
||||||
.amount
|
|
||||||
.parse::<u64>()
|
|
||||||
.unwrap()
|
|
||||||
.cmp(&b.amount.amount.parse::<u64>().unwrap())
|
|
||||||
.reverse()
|
|
||||||
};
|
|
||||||
|
|
||||||
let largest_token_balances = if token_balances.len() > NUM_LARGEST_ACCOUNTS {
|
let largest_token_balances = if token_balances.len() > NUM_LARGEST_ACCOUNTS {
|
||||||
token_balances
|
token_balances
|
||||||
|
@ -1894,7 +1883,14 @@ impl JsonRpcRequestProcessor {
|
||||||
};
|
};
|
||||||
largest_token_balances.sort_unstable_by(sort_largest);
|
largest_token_balances.sort_unstable_by(sort_largest);
|
||||||
|
|
||||||
Ok(new_response(&bank, largest_token_balances.to_vec()))
|
let largest_token_balances = largest_token_balances
|
||||||
|
.iter()
|
||||||
|
.map(|(address, amount)| RpcTokenAccountBalance {
|
||||||
|
address: address.to_string(),
|
||||||
|
amount: token_amount_to_ui_amount(*amount, decimals),
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
Ok(new_response(&bank, largest_token_balances))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_token_accounts_by_owner(
|
pub fn get_token_accounts_by_owner(
|
||||||
|
|
Loading…
Reference in New Issue