1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//! # evmify
//!
//! [Project page](https://mp-it.dk/projects/evmify) ·
//! [GitHub](https://github.com/madspaaskesen/evmify) ·
//! [Examples](https://github.com/madspaaskesen/evmify/blob/main/EXAMPLES.md) ·
//! [Roadmap](https://github.com/madspaaskesen/evmify/blob/main/FUTURE.md)
//!
//! **EVM-ify any chain.** One read API for EVM and non-EVM chains, always answered in EVM JSON-RPC shape.
//!
//! * [`EvmClient`] — typed `eth_*` client that works on any EVM chain (Ethereum, L2s,
//! sidechains). Unknown response fields are preserved, never dropped.
//! * [`pipeline`] — a modular **adapter → normalizer → transformer** pipeline that serves
//! non-EVM chains (Solana and Bitcoin included) as EVM blocks, transactions, receipts
//! and logs.
//! * [`ChainProvider`] — the trait both implement, so you can hold them side by side.
//!
//! ```no_run
//! # #[cfg(feature = "http")]
//! # async fn demo() -> evmify::Result<()> {
//! use evmify::{BlockId, ChainProvider, EvmClient, adapters::solana};
//!
//! // Shorthand keys use the chain's public RPC (or EVMIFY_RPC_<KEY>); URLs work too.
//! let chains: Vec<Box<dyn ChainProvider>> = vec![
//! Box::new(EvmClient::connect("ethereum").await?),
//! Box::new(EvmClient::connect("https://mainnet.base.org").await?),
//! Box::new(solana::connect("solana")?),
//! ];
//! for chain in &chains {
//! let block = chain.block(BlockId::Latest, false).await?;
//! println!("{}: {:?}", chain.chain().name, block.map(|b| b.number));
//! }
//! # Ok(()) }
//! ```
//!
//! Built and maintained by Mads Paaskesen, Hardcore Websmith at [MP-IT](https://mp-it.dk/projects/evmify).
pub use ;
pub use ;
pub use ;
pub use EvmClient;
pub use ;
pub use ChainProvider;
pub use ;
pub use HttpTransport;
pub use ;
pub use *;