Skip to content
Back to skills

Inscriptions

ASecurity

Inscriptions: arbitrary data committed to specific sats via Taproot envelope structure. Foundation for BRC-20, recursive inscriptions, "Bitcoin NFTs". USE WHEN: creating/parsing inscriptions, debugging inscription flow, evaluating inscription cost / fee impact.

  • 31 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 8, 2026
ai-agentsgonodedebugginggitapi

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 22, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill inscriptions --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Inscriptions?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Inscriptions
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-inscriptions/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-inscriptions)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: bitcoin-metaprotocols-inscriptions
description: |
  Inscriptions: arbitrary data committed to specific sats via Taproot
  envelope structure. Foundation for BRC-20, recursive inscriptions,
  "Bitcoin NFTs".
  USE WHEN: creating/parsing inscriptions, debugging inscription
  flow, evaluating inscription cost / fee impact.
allowed-tools: Read, Grep, Glob
---

# Inscriptions

Casey Rodarmor's scheme (Jan 2023) for embedding arbitrary data
on Bitcoin via Taproot script-path commitments. Combined with
ordinals, each inscription is "owned by" a specific sat.

## Mechanism

```
1. Construct a Taproot script tree containing an "envelope" leaf:
   OP_FALSE
   OP_IF
       OP_PUSH "ord"
       OP_PUSH 1                ; field 1 = content type
       OP_PUSH "image/png"
       OP_PUSH 0                ; field 0 = body
       OP_PUSH <data chunks>
       ...
   OP_ENDIF
2. Commit to the script tree in a Taproot output.
3. Reveal the inscription via spending that output, using script-path:
   - Witness includes the envelope + control block.
   - Data appears in the witness on chain.
```

The data is "inscribed on" the first sat of the spent input.

## Two-tx pattern

Most inscriptions use a 2-tx pattern:
- **Commit tx**: pay-to-Taproot output committing to envelope.
- **Reveal tx**: spend commit output, revealing inscription in
  witness.

This pattern allows re-use of prior key/script tree.

## Inscription envelope fields

```
field 0: body (the actual data)
field 1: content_type (MIME type)
field 2: pointer (sat offset within UTXO)
field 3: parent (parent inscription ID for relationships)
field 5: metadata (CBOR-encoded)
field 7: metaprotocol (e.g., "brc-20")
field 9: content_encoding (e.g., "br" for brotli)
```

## Recursive inscriptions

Field 6: `delegate` lets one inscription reference content of
another. Forms a graph; saves bytes by re-using inscribed data.

Inscription "scripts" that load JS/SVG/HTML can use
`/r/inscription/<id>` URLs to fetch other inscriptions on-chain.

## Privacy / cost impact

Inscriptions consume **witness space**, which is discounted 4x in
fee accounting. But they still cost real money:
- A 100 KB inscription costs ~25,000 vB ≈ a normal small block-size
  worth of fees.
- Big inscriptions (1+ MB images) can cost equivalent of a typical
  full block.

## Inscription waves

- **Jan 2023**: launch; high fees triggered.
- **May 2023**: BRC-20 wave caused massive fee spike.
- **Q1 2024**: ongoing constant inscription activity.
- **April 2024**: Runes launch (different mechanism, similar effect).

## Use cases

- **Bitcoin NFTs** — JPEG, PNG, SVG, HTML.
- **BRC-20** tokens (covered separately).
- **Recursive apps** — JS/HTML on chain.
- **Provenance** — digital art ownership.

## Relay policy: datacarrier / OP_RETURN

In **Bitcoin Core** the `-datacarrier*` options govern `OP_RETURN`
outputs only, so they never applied to inscriptions, which ride in
the **witness**. Knots differs: `-datacarrierfullcount` defaults to 1
there ("Apply datacarriersize limit to all known datacarrier
methods") and its `DatacarrierBytes()` walks the input witness, so
the Knots `-datacarriersize=83` default *does* bear on envelopes
(`v29.4.1.knots20260508`, Sept 2026). Core's defaults changed
materially in **30.0 (October 2025)** and still stand in
**31.1 (July 2026)**:

```
                       <= 29.x      30.0+
-datacarriersize       83 bytes     100,000 bytes (aggregate)
OP_RETURN outputs/tx   1            many (relay + mining)
-minrelaytxfee         1 sat/vB     0.1 sat/vB
-incrementalrelayfee   1 sat/vB     0.1 sat/vB
-blockmintxfee         1 sat/vB     0.001 sat/vB
```

100,000 bytes "effectively uncaps the limit, as the maximum
transaction size limit will be hit first" (30.0 release notes): an
`OP_RETURN` scriptPubKey is non-witness, 4 WU per byte, so 100 KB of
it already blows past the 400,000 WU standard-tx weight limit.

Consequences for metaprotocols:
- `OP_RETURN` is now a relay-viable data channel of effectively
  arbitrary size, and no longer capped at one output per tx. Matters
  most for protocols that encode state there (Runes).
- It does **not** make `OP_RETURN` cheaper than a witness envelope:
  witness bytes cost 1 WU, `OP_RETURN` bytes cost 4 WU, so bulk
  inscription payloads stay ~4x cheaper in the witness.
- Both options still exist and are still settable;
  `-datacarriersize=83` restores the old cap. The removal proposal
  discussed during 30.0 development was dropped — neither option
  carries a deprecation marker as of 31.1 (July 2026).

## Status / criticism

Some Bitcoin developers see inscriptions as **chain spam** — using
chain space for non-monetary data. Bitcoin Knots filters them by
default: at `v29.4.1.knots20260508` (Sept 2026) `-rejectparasites=1`
("refuse to relay or mine parasitic overlay protocols") and
`-rejecttokens=1` are the shipped defaults, alongside
`-datacarriersize=83` and `-minrelaytxfee` of 1 sat/vB.

Counterview: inscriptions pay full market fees, are legitimate
tx, and can't be filtered without arbitrary mempool policy that
deviates from consensus. Core moved its own defaults the other way
(see above); the uncapping merged as PR #32406 on 9 June 2025, four
months before 30.0 shipped on 13 October 2025. The dispute ran
alongside a node-share surge over the same period: Knots went from
~400 reachable nodes in Jan 2025 to a peak of 7,112 on 14 Sep 2025,
and sits at 4,399 — 17.0% of 25,864 reachable public nodes — as of
15 September 2026 (coin.dance). Reachable-node counts are not
sybil-resistant, so read that surge as a signal, not a headcount.

On **Core's chain** this stays **policy, not consensus**: a filtered
tx remains valid and confirms as soon as any miner includes it. That
is no longer true of current Knots builds. BIP-110 ("Reduced Data
Temporary Softfork") invalidates, at the consensus layer, Tapscripts
that execute `OP_IF`/`OP_NOTIF`, pushdata payloads and script-argument
witness items over 256 bytes, and Taproot annexes — which covers the
inscription envelope itself. Its mandatory-signaling window opened on
8 August 2026, the chain split, the minority chain stalled, and the
BIP was marked **Closed** in the BIPs repo days later (bips#2245,
"following a chain split with stalled mining"). It never reached its
55% threshold by signaling; instead it took effect as a flag day at
block 961,640 (30 August 2026), the first block of a separate BLAKE2b
proof-of-work chain, with the data limits running to 1 September 2027.
That change shipped in the `v29.4.1.knots20260508` line (rc1 tagged
21 August 2026; final release 2 September 2026). UTXOs created before
the flag-day height are grandfathered, so inscriptions made earlier
stay spendable there. So as of September 2026: policy on Core's chain,
consensus on the Knots BLAKE2b chain — and those are two different
chains. See [../../core/knots/SKILL.md](../../core/knots/SKILL.md).

## Tools

- **ord client** — primary creation/viewing.
- **OrdinalsBot, Gamma.io** — services for minting + marketplace.
- **Magic Eden** — history: its Ordinals/Runes marketplace closed
  9 March 2026 and the Bitcoin API followed on 27 March 2026.
  `api-mainnet.magiceden.dev/v2/ord/btc/*` returns
  `503 no healthy upstream` as of September 2026 — do not code
  against it.
- **OrdiScan, mempool.space** — explorers with inscription view.

## Common bugs

- Reveal tx must spend the commit's output; if you spend a different
  output, no inscription is created.
- Sat tracking: ord computes which sat owns the inscription (first
  sat of first input). Mistakes here lose the inscription's
  identity.
- Content too large: many providers reject > a few MB.

## See also

- [ordinals/SKILL.md](../ordinals/SKILL.md)
- [brc-20/SKILL.md](../brc-20/SKILL.md)
- [runes/SKILL.md](../runes/SKILL.md)
- [../../protocol/taproot/SKILL.md](../../protocol/taproot/SKILL.md)

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.