From 5715bcd312404be0b1c6d7fbe09107f31d02305f Mon Sep 17 00:00:00 2001 From: Hanyun Xu Date: Tue, 15 Jun 2021 05:22:53 -0700 Subject: [PATCH] feat: extend Middleware trait customized for celo (#314) * Add CeloMiddleware trait * change types of block number and returned keys --- ethers-providers/src/lib.rs | 14 ++++++++++++++ ethers-providers/src/provider.rs | 15 +++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/ethers-providers/src/lib.rs b/ethers-providers/src/lib.rs index dd7f0412..c6ea970e 100644 --- a/ethers-providers/src/lib.rs +++ b/ethers-providers/src/lib.rs @@ -561,3 +561,17 @@ pub trait Middleware: Sync + Send + Debug { .map_err(FromErr::from) } } + +#[cfg(feature = "celo")] +#[async_trait] +pub trait CeloMiddleware: Middleware { + async fn get_validators_bls_public_keys( + &self, + block: Option, + ) -> Result>, ProviderError> { + self.provider() + .get_validators_bls_public_keys(block) + .await + .map_err(FromErr::from) + } +} diff --git a/ethers-providers/src/provider.rs b/ethers-providers/src/provider.rs index 898eff0b..da40a074 100644 --- a/ethers-providers/src/provider.rs +++ b/ethers-providers/src/provider.rs @@ -15,6 +15,8 @@ use ethers_core::{ utils, }; +#[cfg(feature = "celo")] +use crate::CeloMiddleware; use crate::Middleware; use async_trait::async_trait; use hex::FromHex; @@ -150,6 +152,19 @@ impl Provider

{ } } +#[cfg(feature = "celo")] +#[async_trait] +impl CeloMiddleware for Provider

{ + async fn get_validators_bls_public_keys( + &self, + block: Option, + ) -> Result>, ProviderError> { + let block = utils::serialize(&block.unwrap_or_else(|| BlockNumber::Latest.into())); + self.request("istanbul_getValidatorsBLSPublicKeys", [block]) + .await + } +} + #[async_trait] impl Middleware for Provider

{ type Error = ProviderError;