8-Step Verification

The full algorithm for verifying a BCA address. Pure hash operations, under 1ms, no external dependencies.

Inputs

The 8 steps

#CheckWhy
1collision count ≤ 2Paper constraint. Only 0, 1, or 2 are valid.
2subnet prefix matches addressThe address's first 64 bits must match the claimed subnet.
3SHA-256(publicKey) is in transaction's OP_RETURNBinds the device identity to the Bitcoin anchor.
4block header is 80 bytesFormat sanity check.
5Merkle proof: transaction is in the blockUses double-SHA-256 (Bitcoin's Merkle tree variant).
6Merkle proof: modifier is in the transactionUses SHA-256. Root is the second 32 bytes of the OP_RETURN.
7block header has at least 16×(sec+2) leading zero bitsThis is where 89-bit security comes from. The block's proof-of-work.
8recomputed Hash1 matches the address's interface identifierThe final binding check. All the other inputs produce this specific address.
Strict mode. IronIP adapters always run all 8 steps. If any step fails, verification fails. No "pending confirmation" bypass — pending anchors simply aren't in the active pool, so pending addresses never reach production verification.

Where the security lives

Step 7 is the one that matters. Checking that a block header has N leading zero bits is cheap (a hash comparison). Producing a block header with N leading zero bits is expensive — that's what Bitcoin miners do for billions of dollars a year in aggregate.

An attacker trying to forge a BCA address would need to produce their own block header meeting the difficulty target. At sec = 2, that's ~289 hash operations. Economically, this maps to millions of dollars of electricity per attempted forgery.

Security levels from the paper

secLeading zeros requiredEffective security
032 bits59 bits
148 bits75 bits
264 bits89 bits (BSV typical)
380 bits107 bits
5112 bits139 bits (BTC typical)

Higher sec values require older blocks with higher relative difficulty, which costs more Bitcoin transaction value to anchor. See the paper notes for the cost/security tradeoff analysis.

Implementation

Reference implementation: src/lib/bca-core.js function verifyBCA(ipv6Address, bcaParams). Zero AWS dependencies. Uses only standard crypto primitives:

Zero-dependency verification

Every piece of data needed is in the BCA Parameters. No network calls. No database lookups. A standalone verifier runs on any machine with Node.js and hash primitives. See Verify an Address.

See also