Crate ordinals_parser

Crate ordinals_parser 

Source
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