diff --git a/rpc/src/rpc.rs b/rpc/src/rpc.rs index 5580d1efe538dc..c850d394bb01e0 100644 --- a/rpc/src/rpc.rs +++ b/rpc/src/rpc.rs @@ -350,15 +350,18 @@ impl JsonRpcRequestProcessor { pubkeys: Vec, config: Option, ) -> Result>>> { + let mut accounts: Vec> = vec![]; + let config = config.unwrap_or_default(); let bank = self.bank(config.commitment); let encoding = config.encoding.unwrap_or(UiAccountEncoding::Base64); check_slice_and_encoding(&encoding, config.data_slice.is_some())?; - let accounts = pubkeys - .into_iter() - .map(|pubkey| get_encoded_account(&bank, &pubkey, encoding, config.data_slice)) - .collect::>>()?; + for pubkey in pubkeys { + let response_account = + get_encoded_account(&bank, &pubkey, encoding, config.data_slice)?; + accounts.push(response_account) + } Ok(new_response(&bank, accounts)) } @@ -392,21 +395,19 @@ impl JsonRpcRequestProcessor { self.get_filtered_program_accounts(&bank, program_id, filters)? } }; - let result = if program_id == &spl_token_id_v2_0() - && encoding == UiAccountEncoding::JsonParsed - { - get_parsed_token_accounts(bank.clone(), keyed_accounts.into_iter()).collect() - } else { - keyed_accounts - .into_iter() - .map(|(pubkey, account)| { - Ok(RpcKeyedAccount { + let result = + if program_id == &spl_token_id_v2_0() && encoding == UiAccountEncoding::JsonParsed { + get_parsed_token_accounts(bank.clone(), keyed_accounts.into_iter()).collect() + } else { + let mut encoded_accounts = vec![]; + for (pubkey, account) in keyed_accounts { + encoded_accounts.push(RpcKeyedAccount { pubkey: pubkey.to_string(), account: encode_account(&account, &pubkey, encoding, data_slice_config)?, - }) - }) - .collect::>>()? - }; + }); + } + encoded_accounts + }; Ok(result).map(|result| match with_context { true => OptionalContext::Context(new_response(&bank, result)), false => OptionalContext::NoContext(result), @@ -2825,10 +2826,10 @@ pub mod rpc_accounts { max_multiple_accounts ))); } - let pubkeys = pubkey_strs - .into_iter() - .map(|pubkey_str| verify_pubkey(&pubkey_str)) - .collect::>>()?; + let mut pubkeys: Vec = vec![]; + for pubkey_str in pubkey_strs { + pubkeys.push(verify_pubkey(&pubkey_str)?); + } meta.get_multiple_accounts(pubkeys, config) }