diff --git a/src/message_pool/msgpool/mod.rs b/src/message_pool/msgpool/mod.rs index eddb2dbce5d..2dba45cf89d 100644 --- a/src/message_pool/msgpool/mod.rs +++ b/src/message_pool/msgpool/mod.rs @@ -615,7 +615,7 @@ pub mod tests { assert_eq!(mpool.get_sequence(&sender).unwrap(), 4); - let (p, _) = mpool.pending().unwrap(); + let (p, _) = mpool.pending(); assert_eq!(p.len(), 3); } diff --git a/src/message_pool/msgpool/msg_pool.rs b/src/message_pool/msgpool/msg_pool.rs index bdc55a99200..c5ffd39b871 100644 --- a/src/message_pool/msgpool/msg_pool.rs +++ b/src/message_pool/msgpool/msg_pool.rs @@ -586,21 +586,22 @@ where /// Return a tuple that contains a vector of all signed messages and the /// current tipset for self. - pub fn pending(&self) -> Result<(Vec, Tipset), Error> { - let mut out: Vec = Vec::new(); + pub fn pending(&self) -> (Vec, Tipset) { let pending = self.pending.read().clone(); - - for (addr, _) in pending { - out.append( - self.pending_for(&addr) - .ok_or(Error::InvalidFromAddr)? - .as_mut(), - ) + let len = pending.values().map(|mset| mset.msgs.len()).sum(); + let mut out = Vec::with_capacity(len); + + for mset in pending.into_values() { + out.extend( + mset.msgs + .into_values() + .sorted_unstable_by_key(|m| m.message().sequence), + ); } let cur_ts = self.current_tipset(); - Ok((out, cur_ts)) + (out, cur_ts) } /// Return a Vector of signed messages for a given from address. This vector diff --git a/src/rpc/methods/eth.rs b/src/rpc/methods/eth.rs index 3966c8e5b7b..b98f4b3bb7f 100644 --- a/src/rpc/methods/eth.rs +++ b/src/rpc/methods/eth.rs @@ -2485,7 +2485,7 @@ async fn get_eth_transaction_by_hash( } // If not found, try to get it from the mempool - let (pending, _) = ctx.mpool.pending()?; + let (pending, _) = ctx.mpool.pending(); if let Some(smsg) = pending.iter().find(|item| item.cid() == message_cid) { // We only return pending eth-account messages because we can't guarantee diff --git a/src/rpc/methods/mpool.rs b/src/rpc/methods/mpool.rs index c03b773be96..cea8afa3d0a 100644 --- a/src/rpc/methods/mpool.rs +++ b/src/rpc/methods/mpool.rs @@ -60,7 +60,7 @@ impl RpcMethod<1> for MpoolPending { .chain_store() .load_required_tipset_or_heaviest(&tipset_key)?; - let (mut pending, mpts) = ctx.mpool.pending()?; + let (mut pending, mpts) = ctx.mpool.pending(); let mut have_cids = HashSet::new(); for item in pending.iter() {