counters.FUN
⌘K

How it works.

A counter is a file in Bitcoin

A counter is a Counterparty asset whose description is a file, carried into Bitcoin's witness data by a v11 taproot envelope. The counters indexer numbers them gap-free from zero, in order of block height and then position in the block — the same ordering ordinals use. Counter #0 is XDUALS, at block 902,005, and always will be.

Witness data is the cheapest place on Bitcoin to put bytes: the SegWit discount makes it four times cheaper than an output, and it never enters the UTXO set. That is the whole reason counters live there rather than where Bitcoin Stamps put theirs.

Ownership is Counterparty's. Whoever holds the asset balance owns the counter, and transferring it is an ordinary send — the file never moves, because it is pinned to the asset rather than to a coin.

Why some counters are not shown here

A counter's description does not have to be a file. It can be a URL, and for well over half the counters indexed so far it is — 64 bytes of ipfs://… or https://… pointing at a server somewhere.

Those are valid counters and this site does not show them. Rendering one means fetching bytes from whoever operates that server, and asking you to trust that what comes back is what was inscribed. Everything on counters.fun is read out of a Bitcoin block, so the rule is enforced in the database query rather than in a filter you can turn off: a pointer-like counter cannot appear in any listing, and asking for its content returns a refusal rather than a fetch.

How a counter gets a pool

Counterparty has a native AMM — constant product, 50 basis points on an XCP pair, activated at block 952,500. There is no contract to deploy and nothing for this site to hold. Two ways to reach one:

The second is stronger, and it is stronger because of consensus rather than because of a promise. On any pool's page this site shows what share of the LP supply actually sits at the unspendable address, so "liquidity locked" is a number you can check rather than a badge.

Minting one

Minting is two transactions. A commit funds a taproot output whose script carries your file; a reveal spends it, putting the bytes on chain and issuing the asset in the same message. Counterparty composes both.

The commit is broadcast before the reveal is signed, which looks backwards and is not: a browser wallet cannot complete a signature for an input whose parent transaction it cannot find. If the reveal never gets signed, nothing is lost — the envelope is re-keyed to your own key before signing, so the reveal can be rebuilt and signed again at any point.

Reveals above 400,000 weight units are non-standard. The public network will not relay them at any fee rate, which is a policy limit rather than a price; the multi-megabyte counters in the index were mined through a direct-to-miner route instead.

Wallets

Two browser wallets speak Counterparty, and counters.fun works with both: XCP Wallet and Horizon Wallet. They differ in ways that matter, and the site absorbs the differences rather than passing them on:

Connecting proves nothing cryptographically here. XCP Wallet signs BIP-322 and Horizon signs ECDSA/BIP-137 and refuses BIP-322, so requiring a proof would have meant supporting one wallet and locking out the other. Nothing on this site depends on it — the chain settles ownership.

Where the data comes from

Counter numbers, content and provenance come from the counters server, the protocol's reference indexer, which scans from block 902,000. Pools, balances and quotes come from Counterparty Core. This site joins the two, because the question it is built on — which counters have a pool — spans both and neither can answer it alone. Composing, signing and broadcasting stay between your wallet and the node.