use std::sync::Arc;
use futures::Future;
use reth_chainspec::{ChainInfo, ChainSpec};
use reth_errors::RethResult;
use reth_primitives::{Address, U64};
use reth_rpc_types::SyncStatus;
#[auto_impl::auto_impl(&, Arc)]
pub trait EthApiSpec: Send + Sync {
fn protocol_version(&self) -> impl Future<Output = RethResult<U64>> + Send;
fn chain_id(&self) -> U64;
fn chain_info(&self) -> RethResult<ChainInfo>;
fn accounts(&self) -> Vec<Address>;
fn is_syncing(&self) -> bool;
fn sync_status(&self) -> RethResult<SyncStatus>;
fn chain_spec(&self) -> Arc<ChainSpec>;
}