Tacit's Bitcoin↔Ethereum bridge runs on a header relay and a reflection that anyone can push forward — both are plain on-chain functions with no special permission, the same ones Tacit's own servers call. If something looks stuck, you can pay a little gas and move it yourself, from your own wallet.
Reading the relay…
Submits real Bitcoin block headers to BitcoinLightRelay.advanceTip on Ethereum. The contract checks their proof of work itself — it isn't Tacit's call to accept or refuse them.
| Batch | Headers | Status |
|---|
The reflection is far behind the relay — more than 2,016 blocks. A plain advance won't help; it needs advanceReflectionAncestry() instead, a separate permissionless recovery call.
Once enough headers are in, folding Bitcoin's state into the pool needs one more thing: a real SP1 zero-knowledge proof over the batch, bought with PROVE credits on the Succinct network. attestBitcoinStateProven is permissionless too — anyone holding a valid proof can submit it — but generating one isn't something a browser page can safely do yet: it needs a funded prover account, and there's no way today to ask for one without a signature that looks identical to draining that account.
Tacit's own tacit-reflection cron does this every 5 minutes when there's a new batch ready. Anyone can also run it themselves, against the same public inputs, with their own funded key: see reflection-folder.js.