import sys
from typing import List, Optional
import binascii
try:
import ordinals_parser
except ImportError:
print("This is an example file that assumes 'ordinals_parser' Python package is installed.")
print("The actual implementation would require building PyO3 bindings for the Rust library.")
sys.exit(1)
def parse_inscriptions_from_hex(tx_hex: str) -> None:
try:
tx_bytes = binascii.unhexlify(tx_hex)
tx = ordinals_parser.Transaction.from_bytes(tx_bytes)
print(f"Transaction ID: {tx.get_txid()}")
inscriptions = ordinals_parser.parse_inscriptions_from_transaction(tx)
if not inscriptions:
print("No inscriptions found in this transaction.")
return
print(f"Found {len(inscriptions)} inscription(s):")
for i, inscription in enumerate(inscriptions):
print(f"\nInscription #{i + 1}")
print_inscription_details(inscription)
except Exception as e:
print(f"Error parsing inscriptions: {e}")
def print_inscription_details(inscription) -> None:
print(f" Content Type: {inscription.content_type() or 'None'}")
if inscription.content_encoding():
print(f" Content Encoding: {inscription.content_encoding()}")
print(f" Content Length: {inscription.content_length() or 0} bytes")
if inscription.metaprotocol():
print(f" Metaprotocol: {inscription.metaprotocol()}")
parents = inscription.parents()
if parents:
print(" Parents:")
for parent in parents:
print(f" {parent}")
if inscription.delegate():
print(f" Delegate: {inscription.delegate()}")
pointer = inscription.pointer()
if pointer is not None:
print(f" Pointer: {pointer}")
content_type = inscription.content_type()
if content_type and content_type.startswith('text/'):
body = inscription.body()
if body:
text = body.decode('utf-8', errors='replace')
preview = f"{text[:100]}..." if len(text) > 100 else text
print(f' Content Preview: "{preview}"')
elif content_type and content_type.startswith('image/'):
print(" Content: [IMAGE DATA]")
elif content_type:
print(" Content: [BINARY DATA]")
print(" Flags:")
print(f" Duplicate Fields: {inscription.duplicate_field}")
print(f" Incomplete Fields: {inscription.incomplete_field}")
print(f" Unrecognized Even Fields: {inscription.unrecognized_even_field}")
print(f" Hidden: {inscription.hidden()}")
def create_inscription() -> None:
inscription = ordinals_parser.Inscription()
inscription.set_content_type("text/plain;charset=utf-8")
inscription.set_body("Hello, Ordinals!".encode('utf-8'))
witness_script = inscription.to_script()
print("\nCreated inscription witness script:")
print(binascii.hexlify(witness_script.to_bytes()).decode())
return inscription
if __name__ == "__main__":
sample_tx_hex = (
"0200000000010137c361dc8bdf2c902a73c76f3059db944fc62e635ae7381aa06c79e9a1d1640b0100000000fdffffff020000000000000000296a0e6f7264010100000000000000110011018fe3bfeff84353cd5863c7c9ba48575a0cb2fb606d075f336701000000000017a914121f75e89e9b240a83b303b6e22e074d1c65dfa9870247304402205d793a28c26e568cf0601aae58a976a880f98fae56d905ab9e9e7f7342d4b3d402201b53b8f5507ac93eb7afad7e34af11c78c9b325947ad8c3f25be67700c0c0a90012103af0b2c5c872b732ac9474c576f84950e0a89ec57500507944c87f1fa4af76b9d00000000"
)
print("Parsing sample transaction...")
parse_inscriptions_from_hex(sample_tx_hex)
print("\nCreating a new inscription...")
create_inscription()