Skip to content
Back to skills

Labels

ASecurity

BIP329 wallet labels portability: standard JSON Lines format for exporting/importing labels (addresses, txs, UTXOs, xpubs, inputs, outputs) across wallet software. USE WHEN: importing/exporting label sets, integrating with multiple wallets that should share annotations.

  • 31 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 8, 2026
ai-agents

Security analysis

A100/100

Scanned September 8, 2026

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

Installs into .claude/skills of the current project.

Are you the author of Labels?

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

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

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-wallet-labels
description: |
  BIP329 wallet labels portability: standard JSON Lines format for
  exporting/importing labels (addresses, txs, UTXOs, xpubs, inputs,
  outputs) across wallet software.
  USE WHEN: importing/exporting label sets, integrating with multiple
  wallets that should share annotations.
allowed-tools: Read, Grep, Glob
---

# BIP329 — Wallet Labels

Wallets maintain user-supplied labels: "Coffee shop", "Friend Alice",
"Cold storage 1". Pre-BIP329, labels were proprietary per wallet and
lost on migration. BIP329 standardizes a portable JSON Lines format.

## Format

One JSON object per line (NDJSON / JSONL):

```json
{"type":"tx","ref":"f91d0a8a78462bc59398f2c5d7a84fcff491c26ba54c4833478b202796c8aafd","label":"Coffee shop"}
{"type":"addr","ref":"bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh","label":"Friend Alice"}
{"type":"output","ref":"f91d0a8a...:0","label":"Sent to Alice"}
{"type":"input","ref":"a32f...:1","label":"Spent from cold storage"}
{"type":"xpub","ref":"xpub6CV2...","label":"Account 1"}
{"type":"pubkey","ref":"02f7e2...","label":"Cosigner Bob"}
```

## Type field values

| Type | `ref` semantics |
|------|----------------|
| `tx` | txid |
| `addr` | address |
| `pubkey` | hex-encoded pubkey |
| `xpub` | xpub serialization |
| `input` | `<txid>:<vin>` |
| `output` | `<txid>:<vout>` |

## Optional fields

```json
{
  "type":"addr",
  "ref":"bc1q...",
  "label":"Customer 123",
  "origin":"vendor-X",       // optional source identifier
  "spendable":true            // for output: still spendable hint
}
```

## Spendability hint

For UTXOs that are part of a multi-step protocol (vault unvault, LN
HTLC, frozen for CoinJoin), the wallet may mark them `"spendable":false`.
Importing wallet sees this and excludes them from coin selection by
default.

## Filename convention

`<wallet_name>-labels.jsonl` typical extension.

## Import flow

```
for line in file:
    obj = json.loads(line)
    if obj.type == "tx":   wallet.set_tx_label(obj.ref, obj.label)
    if obj.type == "addr": wallet.set_addr_label(obj.ref, obj.label)
    ...
```

Conflict resolution: import options:
- **Replace**: overwrite existing labels.
- **Merge**: keep existing if conflict, add new ones.
- **Skip duplicates**: do nothing for conflicts.

## Encryption

BIP329 doesn't define encryption. Common practice:
- Encrypt the JSONL file with age, GPG, or wallet-derived key.
- Some wallets export `.aes` or `.gpg` versions natively.

## Implementations

- **Sparrow** — full BIP329 import/export.
- **Specter Desktop** — supports import/export.
- **BlueWallet** — partial support (tx labels only).
- **Bitcoin Core** — labels stored internally; export via JSON RPC
  (`listlabels`, `getaddressesbylabel`) but not BIP329-formatted yet.

## Use cases

- **Migration** — moving from one wallet to another without losing
  the human-readable annotations.
- **Multi-wallet** — same UTXO set viewed in two wallets, both see
  the same labels.
- **Audit / compliance** — exchanges export labels for accounting.
- **Backup** — labels alongside seed backup for full wallet restore.

## Common bugs

- Mixing **address labels** with **xpub labels** semantically — an
  xpub's label applies to the account, not individual addresses.
- Stripping non-ASCII chars on import → labels with emojis / non-Latin
  scripts truncated.
- Exporting **internal change addresses** as labeled-by-default → noise
  in import.
- Unicode normalization (NFC vs NFD) inconsistency between
  exporter / importer.

## See also

- [hd/SKILL.md](../hd/SKILL.md)
- [backup/SKILL.md](../backup/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.