Crates.io | fuel-streams |
lib.rs | fuel-streams |
version | 0.0.16 |
source | src |
created_at | 2024-08-24 15:55:34.584081 |
updated_at | 2024-12-28 09:16:45.75217 |
description | A library for working with streams of Fuel blockchain data |
homepage | https://fuel.network/ |
repository | https://github.com/fuellabs/data-systems |
max_upload_size | |
id | 1350386 |
size | 22,111 |
[!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.
First, add these dependencies to your project:
cargo add fuel-streams futures tokio
Here are some examples to get you started with Fuel Streams:
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(())
}
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(())
}
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
OptionsThe 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 timeContributions 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.
This project is licensed under the Apache-2.0
license. See LICENSE
for more information.