Expand description
A lightweight parser for Bitcoin Ordinals inscriptions.
This library allows you to parse and extract Ordinals inscriptions from Bitcoin transactions without requiring the full Ord codebase.
§Features
- Parse Ordinals inscriptions from Bitcoin transactions
- Support for both classic and modern inscription formats
- Extract content type, body, and other metadata
- Detect JSON in text/plain content
- Low dependency footprint
§Basic Example
use ordinals_parser::{parse_inscriptions_from_transaction, Inscription};
use bitcoin::Transaction;
// Load a Bitcoin transaction
let transaction: Transaction = /* ... */;
// Parse inscriptions
let inscriptions = parse_inscriptions_from_transaction(&transaction);
for inscription in inscriptions {
println!("Content type: {:?}", inscription.content_type());
println!("Content length: {:?}", inscription.content_length());
if let Some(body) = inscription.body() {
// Work with inscription content
}
}§Working with JSON Inscriptions
The library can detect and parse JSON content in both application/json and text/plain inscriptions:
use ordinals_parser::{parse_inscriptions_from_transaction};
use bitcoin::Transaction;
use serde_json::Value;
// Load a Bitcoin transaction
let transaction: Transaction = /* ... */;
// Parse inscriptions
let inscriptions = parse_inscriptions_from_transaction(&transaction);
for inscription in inscriptions {
if let (Some(content_type), Some(body)) = (inscription.content_type(), inscription.body()) {
// Check if it's JSON content
let is_json = content_type == "application/json" ||
(content_type.starts_with("text/plain") &&
if let Ok(text) = std::str::from_utf8(body) {
let trimmed = text.trim();
(trimmed.starts_with('{') && trimmed.ends_with('}')) ||
(trimmed.starts_with('[') && trimmed.ends_with(']'))
} else {
false
});
if is_json {
if let Ok(text) = std::str::from_utf8(body) {
if let Ok(json) = serde_json::from_str::<Value>(text) {
// Process BRC-20, Ordinals Collections, etc.
println!("Found JSON content: {:?}", json);
}
}
}
}
}§Creating an Inscription
use ordinals_parser::InscriptionBuilder;
let inscription = InscriptionBuilder::new()
.content_type("text/plain;charset=utf-8")
.body("Hello, Ordinals!".as_bytes())
.build();
// Convert to a script (for inclusion in a Bitcoin transaction)
let script = inscription.to_script();Re-exports§
pub use crate::error::Error;pub use crate::error::Result;pub use crate::inscription::Inscription;pub use crate::inscription::InscriptionBuilder;pub use crate::inscription_id::InscriptionId;pub use crate::envelope::parse_transaction_inscriptions;pub use crate::envelope::parse_input_inscriptions;pub use crate::envelope::is_inscription_input;pub use crate::envelope::parse_envelope;
Modules§
- envelope
- Inscription envelope parsing
- error
- Error handling module
- inscription
- Inscription data structure
- inscription_
id - Inscription ID
- tag
- Tags used in inscriptions
Functions§
- parse_
inscriptions_ from_ transaction - Parse all inscriptions from a Bitcoin transaction