diff --git a/ethers-providers/src/lib.rs b/ethers-providers/src/lib.rs index 87a452ad..2d2d4427 100644 --- a/ethers-providers/src/lib.rs +++ b/ethers-providers/src/lib.rs @@ -455,4 +455,17 @@ pub trait Middleware: Sync + Send + Debug { .await .map_err(FromErr::from) } + + // Parity namespace + + /// Returns all receipts for that block. Must be done on a parity node. + async fn parity_block_receipts + Send + Sync>( + &self, + block: T, + ) -> Result, Self::Error> { + self.inner() + .parity_block_receipts(block) + .await + .map_err(FromErr::from) + } } diff --git a/ethers-providers/src/provider.rs b/ethers-providers/src/provider.rs index b995db50..361fea41 100644 --- a/ethers-providers/src/provider.rs +++ b/ethers-providers/src/provider.rs @@ -642,6 +642,17 @@ impl Middleware for Provider

{ .await .map_err(Into::into) } + + /// Returns all receipts for that block. Must be done on a parity node. + async fn parity_block_receipts + Send + Sync>( + &self, + block: T, + ) -> Result, Self::Error> { + self.0 + .request("parity_getBlockReceipts", vec![block.into()]) + .await + .map_err(Into::into) + } } impl Provider

{ @@ -879,4 +890,15 @@ mod tests { .unwrap() .is_some()); } + + #[tokio::test] + async fn parity_block_receipts() { + let url = match std::env::var("PARITY") { + Ok(inner) => inner, + _ => return, + }; + let provider = Provider::::try_from(url.as_str()).unwrap(); + let receipts = provider.parity_block_receipts(10657200).await.unwrap(); + assert!(!receipts.is_empty()); + } }