Challenge Generation
Each Bitcoin block, Kontor indexers deterministically derive a set of challenges from the block hash. The block hash provides unpredictable, high-entropy randomness that cannot be biased by miners (grinding attacks are economically irrational—the cost of discarding a valid block vastly exceeds any benefit from influencing which nodes are challenged). Using Bitcoin’s proof-of-work as the randomness source ensures challenges are fair, verifiable, and impossible to predict in advance. File selection. Each file in the active set is selected for challenge with constant probability per block, where is the target annual challenges per file and is expected Bitcoin blocks per year. This creates approximately 12 challenges per file annually regardless of network size. The constant challenge rate provides consistent security guarantees as the network scales—a file stored in a network with 1,000 files receives the same audit frequency as one stored in a network with 1,000,000 files. Node selection. For each selected file, the protocol randomly chooses one of its storing nodes with uniform probability where is the set of nodes storing that file. This means nodes storing many copies of the same file don’t gain advantage—each node has equal chance of being challenged regardless of how many other nodes store the file. Challenge parameters. The challenge specifies which file, which node, and which randomly-selected sectors must be proven. The protocol samples sectors uniformly at random from the file’s Merkle tree (or all sectors if the file has fewer than 100). These sector indices are derived deterministically using domain-separated hashing of the block hash combined with the file identifier, ensuring indexers compute identical challenges while maintaining unpredictability.Proof Submission
The challenged node has approximately two weeks ( blocks) to generate and submit a proof. This window serves two purposes: it provides operational buffer for node maintenance and network issues, and it enables proof aggregation—nodes can batch multiple challenges from multiple files into a single Bitcoin transaction, dramatically reducing per-challenge proving costs. Proof generation. The node generates a Nova IVC (Incrementally Verifiable Computation) proof demonstrating possession of the challenged sectors. For each challenged sector, the proof verifies:- The sector index was correctly derived from the challenge seed
- The node possesses the 31-byte symbol at that index
- A valid Merkle path connects that symbol to the public Merkle root
Verification and Detection
When indexers receive a proof transaction, they verify it against the challenge parameters and file metadata. The verification checks:- The proof was submitted before the challenge expired
- The public inputs match the expected challenge (correct file root, seed, tree depth)
- The Nova SNARK verification passes (proving the node executed the correct circuit for all challenged sectors)
- The final state matches the initial state (the Merkle root remained consistent throughout all verifications)
- 10% data loss → 99.997% detection probability per challenge
- 50% data loss → >99.999999999999% detection probability per challenge
- Complete data loss → detection is virtually certain on first challenge