Counterparty Is Not a Blockchain.
Its Centralized Assets Are Not NFTs.
Counterparty says it inherits the security and decentralization of Bitcoin. It does not.
- Bitcoin stores Counterparty's messages but never reads them. What they mean is decided by a program, Counterparty Core, which one team writes and which checks in with that team's website.
- The proof is running today. Since Bitcoin block 866,000, in October 2024, there have been two Counterparty ledgers. Both read the same Bitcoin blocks. They disagree about how much XCP exists, and tokens that exist in one do not exist in the other.
- A token is only as real as the ledger that holds it. Counterparty tokens can have real value and real history, but no blockchain defines or enforces them, so they are not NFTs. Even the collectors who trade them sometimes wryly call them “spreadsheet assets.”
The claim
Counterparty launched in January 2014 as a way to create and trade tokens using Bitcoin transactions. Its documentation answers the obvious question about security like this:
“Counterparty transactions are just as secure as regular Bitcoin transactions because Counterparty transactions are Bitcoin transactions, so Bitcoin miners validate the entire history of the Counterparty network. It is no easier to attack Counterparty than it is to attack Bitcoin itself.”
And on whether two Counterparty nodes can disagree:
“As all Counterparty nodes run the same code, and all receive the same Bitcoin transaction data, the ledgers across each node match exactly.”1
Counterparty's homepage puts it in one line, “By leveraging the security and decentralization of Bitcoin, Counterparty allows for the creation of unique, secure, and transparent tokens,” and calls those tokens NFTs.2 Crypto media pass it along: Decrypt's explainer calls Counterparty “a platform built on top of Bitcoin that inherits the security of the original blockchain.”3 AI assistants now repeat it too.
The claim is rarely challenged, mostly because checking it means reading Python source code, release notes and block explorer data. This page does that. The claim does not hold up.
There are two Counterparty ledgers
If every node's ledger matched exactly, there would be one Counterparty ledger. There are two.
At Bitcoin block 866,000, mined on 17 October 2024, a new release of Counterparty's software began applying new rules. According to TokenScan, a Counterparty block explorer, “counterparty-core immediately went down,” fixes followed “in rapid succession,” “a number of users lost funds,” and the ledgers “continued to diverge for over 3 weeks as the core developers struggled to rectify the situation.” TokenScan's summary: “now 2 ledgers exist.”4
They still do. TokenScan serves both, as “Counterparty 2.0,” which follows the developers' current software, and “Counterparty Classic.” On 29 October 2026 both had processed every Bitcoin block up to 973,727, and they disagreed about how much XCP, Counterparty's own currency, exists:5
- Counterparty 2.0: 2,586,537.37844096 XCP
- Counterparty Classic: 2,591,888.21508124 XCP
They also disagree about which tokens exist at all. On 13 September 2026 a Bitcoin transaction in block 966,865 created a token named METABOLICA. Its first subasset, METABOLICA.0001 (“Metabolica Living XCP #0001”), is an edition of ten indivisible art tokens, and several addresses hold them. Ask Counterparty 2.0 and the token exists. Ask Counterparty Classic and the answer is “Asset not found”: Classic does not recognize the transaction that created it. The same is true of XCPISFOREVER, a token minted later that month.6 For block 966,865 itself, the two ledgers report the same Bitcoin block hash and two different Counterparty ledger hashes: the same Bitcoin data, two answers.7
So which ledger is the real one? Bitcoin can't say; it accepted both. Counterparty's own FAQ, asked “Has Counterparty forked?”, answers: “In Counterparty's history there have not been network forks with any adoption.”8 The rest of this page explains why the question has no answer except “whichever one the developers' software produces.”
Bitcoin records the messages. It never reads them.
A Counterparty transaction is a Bitcoin transaction with a message attached: a few dozen bytes, usually in an output Bitcoin treats as plain data, and lightly encrypted with a key anyone can compute. Bitcoin miners check what Bitcoin cares about: the signatures, the bitcoin being spent, the fee. They do not know the bytes are a Counterparty message, let alone whether the message is valid.
Counterparty's software does the reading. Each Counterparty node scans every Bitcoin block, decodes the messages, applies Counterparty's rules and writes the results to its own database: who holds which tokens, which orders are open, which transfers failed. That database is the Counterparty ledger. It is not on Bitcoin. What is on Bitcoin is the raw input to it.
Here is a transfer that failed. On 30 August 2023, Bitcoin block 805,505 confirmed transaction
cda54ea2…. Counterparty decodes it as a send of one RAREPEPE and records it as
“invalid: insufficient funds”: the sender did not have the token.9
Bitcoin miners validated the transaction. They did not validate the send, and could not have. By
Counterparty's own records, then, “Bitcoin miners validate the entire history of the
Counterparty network” is false. The Ethereum whitepaper made the general point years ago:
protocols built this way “cannot force the blockchain not to include transactions that are
not valid within the context of their own protocols.”10
Bitcoin's security does protect something real. Once a message is buried in Bitcoin's chain, no one can quietly remove it or reorder it. But the inputs are not the ledger. The ledger is what the software computes from them, and two versions of the software have computed two ledgers from the same inputs since October 2024.
Who decides what the messages mean
If Bitcoin doesn't decide, something else must. Counterparty has no miners, no validators and no voting, and by its own description its nodes “don't communicate with each other directly.”1 There is no process by which nodes could settle a disagreement. When they agree, it is because they run the same program. So the question is who controls the program.
Counterparty Core is written and released by its developers. Version 11.5.0, released on 30 September 2026, shows how much the network depends on them:
- Every node checks in with the developers' website. At startup and every 24 hours, the
software downloads
counterparty.io/protocol_changes.json. If that file says the node's version is too old, the node stops with an error. If the website cannot be reached, it stops with “Use --force to ignore verification.”11 - The rules are a list the developers maintain. That file lists 134 rule changes, each with the Bitcoin block at which it takes effect. One, added in version 11.5.0, was timed for “about two hours after the v11.5.0 release, so operators have a window to upgrade before the rule takes effect.”12
- The right answers are built in. The software contains 183 checkpoints: the ledger hashes
the developers say a correct node must compute at given blocks, from January 2014 to September
2026. A node that computes anything else stops with a
ConsensusError. The developers edit this list. In March 2025, after changing how the hashes are calculated, they replaced 166 of them in one commit, going back to a block from December 2014.13 - Upgrades come with deadlines. “Your node must be upgraded by block 866,000,” said the release notes for version 10.4.0. When a bug left some nodes with wrong results, the fix was a list of correct hashes: “If your node hashes for block 865699 were not equal to L: 6d64717, TX: f71fa92, M: 8734a58, then you should either rollback to 865690 or restart with the latest bootstrap file.”14
- The developers supply the database. To catch up, the release notes recommend
counterparty-server bootstrap, which downloads a ready-made database from a Google Cloud storage bucket and accepts it if it is signed by one of two keys built into the software: “Counterparty Core” and a backup key belonging to one developer.15
None of this is unusual for software. It is how a company runs a database. It is the opposite of a decentralized ledger.
The argument, step by step
Here is the same case as a formal argument. Each premise is supported above.
P1. A ledger is decentralized only if a decentralized consensus decides what it says. For Counterparty there are two candidates: Bitcoin's consensus, or one of its own. D → (B ∨ O)
P2. Bitcoin's consensus does not decide Counterparty's ledger. It confirmed a send that Counterparty rejects, and it accepts two Counterparty ledgers that disagree. ¬B
P3. Counterparty has no consensus of its own: no miners, no validators, no vote, and nodes that do not communicate with each other directly. ¬O
P4. What decides Counterparty's ledger is one team's software: its rules, its deadlines, its built-in hashes, its check-in with the team's website. T
C1. From P2 and P3, neither candidate decides Counterparty's ledger. ¬(B ∨ O)
C2. From P1 and C1, by modus tollens, Counterparty's ledger is not decentralized. ¬D
C3. From C2 and P4, Counterparty's ledger is decided by one team. It is centralized. ¬D ∧ T
A defender has two places to push. P1 is a definition, and the first objection below takes up the usual alternative. P4 is usually challenged as “nobody has to run the developers' software.” That is true, and it leads to a dilemma. A node either runs the developers' current release or it does not. If it does, the developers decide its ledger. If it does not, it can end up with a different ledger, and nothing decides which one is right. So either one team decides the ledger, or there is no single ledger. Since October 2024 both have been true at once: Counterparty 2.0 is the first case and Counterparty Classic the second.
Why Counterparty tokens are not NFTs
The first hard requirement for an NFT is that the token, and the set it belongs to, be “known to, defined by and enforced by the rules of a real blockchain, not merely recorded on one.” Counterparty tokens are recorded on Bitcoin, and that is all. Bitcoin does not know they exist. They are entries in Counterparty's database, enforced by Counterparty's software, and the database depends on which version of the software you run. METABOLICA.0001 exists or does not exist depending on which ledger you ask.
Compare a token on Ethereum. A token contract is part of Ethereum's state, and every node on the network runs it. A block that breaks the contract's rules is invalid for the whole network, and a node that computes a different result drops off the chain; it does not start a second ledger. Etheria's v0.9 contract was deployed on 19 October 2015, and its code is the same today, because no one, its author included, can change it.16
That is the difference between a token a blockchain enforces and an entry in a database that a program computes from blockchain data. NFTs are the first kind. Counterparty tokens are the second.
“Spreadsheet assets”
The people who collect and trade Counterparty tokens are not confused about this. In the NFT Relics Discord, a server for collectors of early NFTs, Counterparty tokens are called, half as a joke, “spreadsheet assets.” Counterparty audio chats on X are announced “for any spreadsheet enjoyers.” One collector is “sitting comfy with my spreadsheet frog assets.” A Spells of Genesis tenth-anniversary sale was announced there “For the spreadsheet lovers.”17
The joke is accurate. A spreadsheet is a table of who has what, kept by whoever maintains it. That is what a Counterparty ledger is: a table computed by software its developers maintain, with Bitcoin as the log it reads from.
None of this says Counterparty tokens have no value. People collect them, trade them and pay real money for them, and some, such as OLGA, Spells of Genesis and Rare Pepes, have a real place in the history of digital collectibles. Value is whatever collectors agree it is. The question here is narrower: what kind of thing these tokens are. They are not blockchain collectibles, and they are not NFTs. The marketing that says they inherit Bitcoin's security and decentralization has been accepted mostly because almost nobody checks it.
Counterparty is not a blockchain. It is a database that a program computes from Bitcoin data, and one team writes the program. Bitcoin does not validate it, its nodes do not reach consensus, and since October 2024 it has existed in two versions that disagree. Its tokens are entries in that database: sometimes valuable, sometimes historic, and not NFTs.
Objections
“Anyone can run a node and verify the ledger.” Running a node means running the developers' software, which checks in with the developers' website and compares its results to the developers' built-in hashes. Verifying the ledger means checking it against their rules. Anyone who wants different rules gets a different ledger, and no one else has to accept it. That is what Counterparty Classic is.
“The code is open source.” Open source means anyone can read the rules. It does not mean anyone but the maintainers decides them. Plenty of centralized systems publish their source code.
“It's a layer 2.” A layer 2 in the usual sense, such as a rollup on Ethereum, posts its state to the base chain, and a contract on the base chain settles disputes about it. Bitcoin settles nothing about Counterparty. It stores the messages and leaves their meaning to Counterparty's software.
“Ethereum split too.” In 2016, after the DAO hack, Ethereum split into two chains, Ethereum and Ethereum Classic. Each kept its own consensus: its own blocks, and its own network enforcing its own rules, so every token on each chain is defined by that chain. Counterparty's two ledgers have neither. They read the same Bitcoin blocks, nothing decides between them, and they differ only in which version of the software produced them.
“Counterparty is as hard to attack as Bitcoin.” Attacking Bitcoin is not the cheapest way to change Counterparty's ledger. A software release is. In October 2024 no one attacked Bitcoin, and Counterparty's ledger split anyway.
Sources
- Counterparty documentation, “What is Counterparty?”: docs.counterparty.io/docs/basics/what-is-counterparty/ (archived 19 Oct 2026).
- Counterparty homepage: counterparty.io (archived 20 Oct 2026).
- Decrypt, “What Is Counterparty? Historical NFTs Built on Bitcoin,” 30 Dec 2022: decrypt.co (archived 14 Jul 2026).
- TokenScan, “Counterparty Fork”: tokenscan.io/fork (archived 6 Aug 2025). Bitcoin block 866,000, 17 Oct 2024 04:28 UTC: mempool.space.
- XCP supply on 29 Oct 2026, Counterparty 2.0: tokenscan.io/api/asset/XCP; Counterparty Classic: classic.tokenscan.io/api/asset/XCP. Both at Bitcoin block 973,727: tokenscan.io/api/network, classic.tokenscan.io/api/network.
- METABOLICA.0001 on Counterparty 2.0: tokenscan.io/api/asset/A8133710759795923228; on Counterparty Classic: classic.tokenscan.io/api/asset/A8133710759795923228; its metadata. The transaction that created METABOLICA, on Bitcoin: 7cd3ce91…; on Counterparty 2.0 and Counterparty Classic. XCPISFOREVER on Counterparty 2.0 and Counterparty Classic.
- Block 966,865 on Counterparty 2.0 and Counterparty Classic.
- Counterparty documentation repository, General FAQ, “Has Counterparty forked?”, added 26 Sep 2026: docs/basics/faq.md (commit).
- Bitcoin transaction in block 805,505: mempool.space; Counterparty's record of it: api.counterparty.io.
- Ethereum whitepaper, section on alternative blockchain applications.
- Counterparty Core v11.5.0 (commit 8aab989, 30 Sep 2026): the protocol-changes URL, the check at startup, the check every 24 hours, the check itself.
- protocol_changes.json in Counterparty Core v11.5.0; the copy each node downloads is counterparty.io/protocol_changes.json.
- The mainnet checkpoints and the check against them; the March 2025 commit.
- Counterparty Core release notes: v10.4.0 (18 Sep 2024), v10.4.5 (16 Oct 2024).
- Release notes v10.6.0 (24 Oct 2024); the bootstrap bucket, the signature check and the two signing keys.
- Etheria v0.9 contract, deployed 19 Oct 2015: 0xe468d26721b703d224d05563cb64746a7a40e1f4.
- NFT Relics Discord, #nftrelics-general, messages of May 2025 to January 2026 (a search for “spreadsheet” returns 284 results).



