11 releases
0.0.16 | Dec 28, 2024 |
---|---|
0.0.15 | Dec 27, 2024 |
0.0.13 | Nov 28, 2024 |
0.0.11 | Oct 15, 2024 |
0.0.6 | Aug 29, 2024 |
#20 in #cryptocurrencies
376 downloads per month
310KB
6.5K
SLoC
📝 About The Project
[!WARNING] This project is currently under development and is not yet ready for production use.
Fuel Streams is a Rust library designed for working with streams of Fuel blockchain data. It provides an efficient and user-friendly interface for developers to interact with real-time blockchain data, offering support for Fuel-specific data types and leveraging NATS for scalable streaming.
🚀 Features
- Real-time streaming of Fuel blockchain data
- Support for Fuel-specific data types
- Efficient data handling using NATS
- Easy-to-use API for subscribing to and processing blockchain events
- Customizable filters for targeted data retrieval
- Seamless integration with other Fuel ecosystem tools
🛠️ Installing
First, add these dependencies to your project:
cargo add fuel-streams futures tokio
📊 Usage
Here are some examples to get you started with Fuel Streams:
Basic Connection and Subscription
use fuel_streams::prelude::*;
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create a client and establish connection
let mut client = Client::new(FuelNetwork::Local).await?;
let mut connection = client.connect().await?;
println!("Listening for blocks...");
// Create a subject for all blocks
let subject = BlocksSubject::new();
// Subscribe to blocks with last delivery policy
let mut stream = connection
.subscribe::<Block>(subject, DeliverPolicy::Last)
.await?;
while let Some(block) = stream.next().await {
println!("Received block: {:?}", block);
}
Ok(())
}
Custom Connection Options
use fuel_streams::prelude::*;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// Create client with custom connection options
let client = Client::with_opts(ConnectionOpts {
network: FuelNetwork::Local,
username: "custom_user".to_string(),
password: "custom_pass".to_string(),
}).await?;
Ok(())
}
Subject Types and Filtering
Each data type has its own subject builder for filtering. Here's an example using transaction filtering:
use fuel_streams::prelude::*;
use futures::StreamExt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut client = Client::new(FuelNetwork::Testnet).await?;
let mut connection = client.connect().await?;
println!("Listening for transactions...");
// Create a subject for script transactions
let subject = TransactionsSubject::new()
.with_kind(Some(TransactionKind::Script));
// Subscribe to the filtered transaction stream
let mut stream = connection
.subscribe::<Transaction>(subject, DeliverPolicy::Last)
.await?;
while let Some(transaction) = stream.next().await {
println!("Received transaction: {:?}", transaction);
}
Ok(())
}
Available subject builders include:
BlocksSubject::new()
TransactionsSubject::new()
InputsSubject::new()
OutputsSubject::new()
LogsSubject::new()
UtxosSubject::new()
Each subject builder provides specific filtering methods relevant to its data type. For example, TransactionsSubject
allows filtering by transaction kind using the with_kind()
method.
DeliverPolicy
Options
The DeliverPolicy
enum provides control over message delivery in your subscriptions:
All
: Delivers all messages in the streamLast
: Delivers only the last message for the selected subjectsNew
: Delivers only new messages that arrive after subscriptionByStartSequence(u64)
: Delivers messages starting from a specific sequence numberByStartTime(DateTime<Utc>)
: Delivers messages starting from a specific time
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
For more information on contributing, please see the CONTRIBUTING.md file in the root of the repository.
📜 License
This project is licensed under the Apache-2.0
license. See LICENSE
for more information.
Dependencies
~202MB
~4M SLoC