# Gas Network SDK
A Rust SDK for the Gas Network API, providing gas price prediction and optimization for blockchain transactions.
## Features
- **Multi-chain support**: Ethereum, Polygon, Bitcoin, SEI, Optimism, Arbitrum, Base, Linea, Unichain
- **Real-time gas price estimates** with confidence levels
- **Base fee and blob fee predictions** (Ethereum only)
- **Gas price distribution analysis** (Ethereum only)
- **Oracle integration** for on-chain gas data
- **Async/await support** with tokio
- **Comprehensive error handling**
## Installation
Add this to your `Cargo.toml`:
```toml
[dependencies]
gas-network-sdk = "0.1.0"
```
## Quick Start
```rust
use gas_network_sdk::{GasNetworkClient, Chain};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create client with your API key
let client = GasNetworkClient::new("your_api_key".to_string())?;
// Get gas prices for Ethereum
let gas_prices = client.get_gas_prices(Chain::Ethereum).await?;
println!("Current gas prices: {:?}", gas_prices);
// Get next block estimate with 90% confidence
let estimate = client.get_next_block_estimate(Chain::Ethereum, Some(90)).await?;
println!("Next block estimate: {} gwei", estimate.price);
Ok(())
}
```
## API Reference
### Client Creation
```rust
let client = GasNetworkClient::new("your_api_key".to_string())?;
```
### Gas Price Estimation
```rust
// Get comprehensive gas price data
let prices = client.get_gas_prices(Chain::Base).await?;
// Get specific confidence level estimate
let estimate = client.get_next_block_estimate(Chain::Ethereum, Some(95)).await?;
```
### Base Fee Prediction (Ethereum only)
```rust
let base_fees = client.get_base_fee_estimates(Chain::Ethereum).await?;
println!("Current base fee: {} gwei", base_fees.base_fee_per_gas);
println!("Blob base fee: {} gwei", base_fees.blob_base_fee_per_gas);
// Get estimates for next 5 blocks
for block_estimate in &base_fees.estimated_base_fees {
// Each block contains estimates with different confidence levels
for (pending_block, estimates) in &block_estimate.pending_block {
for estimate in estimates {
println!("{}: Base fee {} gwei ({}% confidence)",
pending_block, estimate.base_fee, estimate.confidence);
}
}
}
```
### Gas Distribution Analysis (Ethereum only)
```rust
let distribution = client.get_gas_distribution(Chain::Ethereum).await?;
```
### Oracle Data
```rust
// Get oracle data for a specific chain ID
let oracle_data = client.get_oracle_data(1).await?; // Ethereum mainnet
```
## Supported Chains
- Ethereum
- Polygon
- Bitcoin
- SEI
- Optimism
- Arbitrum
- Base
- Linea
- Unichain
## Error Handling
The SDK uses a comprehensive error system:
```rust
use gas_network_sdk::{GasNetworkError, Result};
match client.get_gas_prices(Chain::Ethereum).await {
Ok(prices) => println!("Success: {:?}", prices),
Err(GasNetworkError::InvalidApiKey) => eprintln!("Invalid API key"),
Err(GasNetworkError::UnsupportedChain(chain)) => eprintln!("Unsupported chain: {}", chain),
Err(GasNetworkError::Api { message }) => eprintln!("API error: {}", message),
Err(e) => eprintln!("Other error: {}", e),
}
```
## Authentication
You can optionally use an API key from [Blocknative](https://blocknative.com) for higher rate limits. The API works without authentication but with rate limitations. Pass your API key when creating the client, or use a placeholder if you don't have one.
## License
Licensed under either of
- Apache License, Version 2.0
- MIT License
at your option.