Skip to content

Transfers

Melvin Carvalho edited this page Apr 14, 2025 · 1 revision

NFT Ownership via UTXO Binding (Single-Use Seals)

This page describes a clear terminology and step-by-step process for creating, binding, and transferring NFTs on Bitcoin using UTXOs and Taproot commitments, without smart contracts or sidechains. This model is inspired by Single-Use Seals (SUS), RGB, and Nostr-native identity.


πŸ“˜ Overview

An NFT in this system is defined by:

  • Metadata (off-chain): image, description, creator, etc.

  • Commitment: a cryptographic binding of the NFT metadata to a Bitcoin UTXO

  • Ownership: whoever controls the UTXO owns the NFT

All identities and addresses are based on a Taproot key, reused across:

  • Bitcoin UTXOs

  • Nostr identity (npub1...)

  • Metadata signing


πŸ” NFT Lifecycle Stages

Stage Term (Technical) Friendly Name Description
Initial unbound UTXO "πŸ”“ Free UTXO" No NFT or metadata bound to it
Bound sealed UTXO "🧷 Anchored NFT" Metadata hash is committed to this UTXO (via tweak or script)
Verifiable revealed commitment "πŸ” Proof-linked NFT" Commitment is published, discoverable and verifiable
Transferred closed seal "πŸšͺ Transferred NFT" UTXO spent, ownership transferred
New owner opened seal "🧳 New Ownership State" New UTXO receives the NFT commitment

🧠 How to Bind an NFT to a UTXO

Step 1: Define Metadata

{
  "id": "stone-tiger-2025",
  "name": "Stone Tiger",
  "image": "ipfs://bafy...jpg",
  "creator": "bc1p...abc",
  "description": "A digital sculpture minted on Bitcoin."
}
  • Store off-chain (IPFS, .well-known, Nostr)

  • Hash the metadata (e.g. sha256(metadata))

Step 2: Bind with Commitment

βœ… Option A: Taproot Tweak (Recommended)

  • Derive tweaked Taproot key: Q = P + H(P || hash)Β·G

  • Generate address from Q

  • Send UTXO to that address β€” this becomes the NFT anchor

βœ… Option B: OP_RETURN (Simpler)

  • Include hash of metadata in OP_RETURN

  • Link NFT metadata to that txid:vout

Option C: Witness Script

  • Embed commitment in scriptSig or witness


πŸ” Ownership Transfer

To transfer the NFT:

  1. Seller spends the current UTXO (closing the seal)

  2. Buyer provides a new Taproot address (derived from their key)

  3. Seller creates new commitment to that address

  4. New UTXO becomes the new owner’s NFT


🧩 Identity = Taproot Key

All roles are tied to a single Taproot x-only pubkey:

  • Nostr identity: npub1... (Bech32-encoded x-only pubkey)

  • Bitcoin address: bc1p... Taproot address

  • NFT owner: controls the UTXO

  • Signer: author of metadata, offers, messages


🧾 NFT Metadata with UTXO

{
  "id": "stone-tiger-2025",
  "image": "ipfs://bafy...jpg",
  "owner": {
    "pubkey": "f3c9a1...",
    "address": "bc1pf3...",
    "utxo": "7a9603...:0"
  },
  "commitment": "sha256(...)",
  "binding_method": "taproot-tweak"
}

πŸ“š Glossary

  • Unbound UTXO: regular UTXO, not linked to an NFT

  • Sealed: metadata hash is cryptographically committed to a UTXO

  • Closed Seal: UTXO is spent, binding is broken

  • Opened Seal: new UTXO is created with updated commitment

  • Taproot Tweak: method for hiding commitments in pubkeys


πŸ”§ Tools to Build


🧭 Future Enhancements

  • Use of HTLC to transfer NFTs via trustless offers

  • Signed metadata using same Taproot key

  • Explore RGB or Taro for richer state management

  • Integration with Nostr relays for NFT discovery


πŸ“Œ Summary

NFT ownership on Bitcoin can be modeled using UTXOs and Taproot commitments. By carefully binding metadata to a UTXO using cryptographic techniques like key tweaks, and representing identity with the same Taproot key across Bitcoin and Nostr, we create a scalable, interoperable, and trust-minimized NFT standard β€” fully Bitcoin-native.

# NFT Ownership via UTXO Binding (Single-Use Seals)

This page describes a clear terminology and step-by-step process for creating, binding, and transferring NFTs on Bitcoin using UTXOs and Taproot commitments, without smart contracts or sidechains. This model is inspired by Single-Use Seals (SUS), RGB, and Nostr-native identity.


πŸ“˜ Overview

An NFT in this system is defined by:

  • Metadata (off-chain): image, description, creator, etc.
  • Commitment: a cryptographic binding of the NFT metadata to a Bitcoin UTXO
  • Ownership: whoever controls the UTXO owns the NFT

All identities and addresses are based on a Taproot key, reused across:

  • Bitcoin UTXOs
  • Nostr identity (npub1...)
  • Metadata signing

πŸ” NFT Lifecycle Stages

Stage Term (Technical) Friendly Name Description
Initial unbound UTXO "πŸ”“ Free UTXO" No NFT or metadata bound to it
Bound sealed UTXO "🧷 Anchored NFT" Metadata hash is committed to this UTXO (via tweak or script)
Verifiable revealed commitment "πŸ” Proof-linked NFT" Commitment is published, discoverable and verifiable
Transferred closed seal "πŸšͺ Transferred NFT" UTXO spent, ownership transferred
New owner opened seal "🧳 New Ownership State" New UTXO receives the NFT commitment

🧠 How to Bind an NFT to a UTXO

Step 1: Define Metadata

{
  "id": "stone-tiger-2025",
  "name": "Stone Tiger",
  "image": "ipfs://bafy...jpg",
  "creator": "bc1p...abc",
  "description": "A digital sculpture minted on Bitcoin."
}
  • Store off-chain (IPFS, .well-known, Nostr)
  • Hash the metadata (e.g. sha256(metadata))

Step 2: Bind with Commitment

βœ… Option A: Taproot Tweak (Recommended)

  • Derive tweaked Taproot key: Q = P + H(P || hash)Β·G
  • Generate address from Q
  • Send UTXO to that address β€” this becomes the NFT anchor

βœ… Option B: OP_RETURN (Simpler)

  • Include hash of metadata in OP_RETURN
  • Link NFT metadata to that txid:vout

Option C: Witness Script

  • Embed commitment in scriptSig or witness

πŸ” Ownership Transfer

To transfer the NFT:

  1. Seller spends the current UTXO (closing the seal)
  2. Buyer provides a new Taproot address (derived from their key)
  3. Seller creates new commitment to that address
  4. New UTXO becomes the new owner’s NFT

🧩 Identity = Taproot Key

All roles are tied to a single Taproot x-only pubkey:

  • Nostr identity: npub1... (Bech32-encoded x-only pubkey)
  • Bitcoin address: bc1p... Taproot address
  • NFT owner: controls the UTXO
  • Signer: author of metadata, offers, messages

🧾 NFT Metadata with UTXO

{
  "id": "stone-tiger-2025",
  "image": "ipfs://bafy...jpg",
  "owner": {
    "pubkey": "f3c9a1...",
    "address": "bc1pf3...",
    "utxo": "7a9603...:0"
  },
  "commitment": "sha256(...)",
  "binding_method": "taproot-tweak"
}

πŸ“š Glossary

  • Unbound UTXO: regular UTXO, not linked to an NFT
  • Sealed: metadata hash is cryptographically committed to a UTXO
  • Closed Seal: UTXO is spent, binding is broken
  • Opened Seal: new UTXO is created with updated commitment
  • Taproot Tweak: method for hiding commitments in pubkeys

πŸ”§ Tools to Build


🧭 Future Enhancements

  • Use of HTLC to transfer NFTs via trustless offers
  • Signed metadata using same Taproot key
  • Explore RGB or Taro for richer state management
  • Integration with Nostr relays for NFT discovery

πŸ“Œ Summary

NFT ownership on Bitcoin can be modeled using UTXOs and Taproot commitments. By carefully binding metadata to a UTXO using cryptographic techniques like key tweaks, and representing identity with the same Taproot key across Bitcoin and Nostr, we create a scalable, interoperable, and trust-minimized NFT standard β€” fully Bitcoin-native.

Clone this wiki locally