Human Rights Foundation · Bitcoin Development Fund · application pending

Recording control of your Bitcoin, without revealing that you hold it.

About 35 percent of unspent Bitcoin sits at addresses whose public keys are already visible on the chain. PACT lets those holders record control of an address now, with no transaction, without naming the address, and without telling anyone they hold anything at all.

Read the code Programme overview (PDF) What is built Threat model
40%of the proposed scope already delivered, before any funding decision
216automated tests and conformance cases, all passing, no setup needed
MITfully open source, specified so others can reimplement it
Verified on the Bitcoin blockchain

The pooling service's first live submission is anchored in block 974,627.

On 5 November 2026 the aggregator sealed a batch, routed it over Tor, and submitted its root to public timestamping servers. Six minutes later it was committed to the Bitcoin chain. The batch contained only padding, no member data, so the submission itself reveals nothing — which is the property the design exists to provide.

Stated precisely: the transaction's OP_RETURN carries the timestamping calendar's aggregated root. The batch root sits inside that aggregation, and the proof file is the path joining the two. That is how the scheme is designed to work, and it is what anyone verifying the claim will find.

batch root  d979530902af98ca1a3fb9481175cc2d9250f92a790054f70b98e7db89067bec
transaction  3b0498b9de5573db3ae48efdaab52b0bc335b9082be2890d579f6b26aa273948
block        974,627  ·  2026-11-05 04:56:22 UTC
Check it on a block explorer ↗
The problem

The holders most exposed are the ones least able to act.

A protocol change that disables spending from exposed-key addresses would require every affected holder to have recorded control in advance. Recording it afterwards is precisely what the change prevents.

The exposure

Measured at block 959,800, between 34.911 and 35.005 percent of unspent supply is exposed. A public key becomes visible the first time an address spends, and for some older address types it was never hidden. Those keys are what a sufficiently capable future adversary would attack, and the coins behind them cannot be made private again.

The trap

The obvious way to record control is to move the coins to a safer address. That is a public, permanent, attributable transaction. For anyone whose safety rests on nobody knowing what they hold, the remedy is worse than the risk.

Who it reaches

Holders in jurisdictions where owning Bitcoin is dangerous, and large self-custodied holders whose cost of acting rises with the size of what they hold. Both are deterred from protecting themselves by the act of protection.

How it works

Four steps, and nothing leaves the holder's machine but a hash.

01

Prove control privately

The holder signs a message with the key that controls the address. The signature never leaves their machine and no transaction is broadcast.

02

Collapse it to a commitment

The signature and a random salt are hashed into a single 32-byte value. It reveals nothing about the address, the balance, or the holder.

03

Timestamp among many

A pool batches commitments from many holders into one Merkle tree and anchors a single root in the Bitcoin chain, so no individual submission is visible.

04

Open it only if needed

If a recovery path is ever opened, the holder reveals the original values and the timestamped record stands. Until then, they have disclosed nothing.

Progress

Five proposed deliverables. Three complete or materially under way.

Bar length is each deliverable's share of the proposed budget; the filled portion is what is finished. Weights are those submitted on the application form.

Aggregates commitments from many holders, batches them into one Merkle tree and anchors a single root.

50% of budget23 of 50 points delivered

Holder tool v1.0

Proposed

The program an individual holder runs: guided, validated, reproducible on three platforms.

23% of budget0 of 23 points delivered

Threat model

Read it ↗Delivered

What the scheme protects against, what it does not, and every assumption it rests on.

10% of budget10 of 10 points delivered

Security documentation

Proposed

Operational guidance for non-technical holders, written to be translated.

10% of budget0 of 10 points delivered

Conformance suite

Browse the vectors ↗Delivered

Test vectors so any independent implementation can be checked against the reference.

7% of budget7 of 7 points delivered
Scroll sideways to see the whole diagram.
PACTPooling service50% of budget · core builtBatching and inclusionproofsDurability andsupervisionHolder tool v1.023% of budget · scheduledGuided flow, no commandlineReproducible on threeplatformsThreat model10% of budget · publishedWhat it protects, whatit does notIndependent review,month 8Security documentation10% of budget · scheduledWritten to be translatedFor holders undersurveillanceConformance suite7% of budget · published51 conformancecases, independently derivedTwo implementationsagree
The programme at a glance. Green is delivered, blue is in build, amber is proposed and scheduled.
Delivery

Two build tracks in parallel, with assurance following the work it reviews.

Months run from grant start. Diamonds mark the three success measures committed to on the application.

Scroll sideways to see the whole diagram.
M0M2M4M6M8M10M12Pooling serviceA · ValidateB · Production hardeningAssuranceC · Independent security reviewHolder toolD · Holder tool v1.0DocumentationE · Operational security guidance123Measure 1Measure 2Measure 3
Measure 1 · Month 6

Pooling service published, running, and reproducible from source by an independent party

Three conditions. Published is a release. Running means an unbroken sequence of sealed intervals a reader can inspect. Independently reproducible means someone who is not the author rebuilds from source and obtains the same artefact.

Measure 2 · Month 8

Threat model published and reviewed by at least two outside reviewers with relevant security expertise

The document is written and published. The measure's weight sits in the review: a threat model is an argument rather than a measurement, so it cannot be self-certified, and the author is the last person able to judge whether it is complete.

Measure 3 · At release

Holder tool v1.0 released after usability testing with at least five non-technical testers

With the failure modes found and fixed documented. The record has to show what testers got wrong and what changed because of it, which is what makes the result useful to anyone building something similar.

Three of these measures need people from outside the project: someone to rebuild the software from source independently, two reviewers with security expertise, and five non-technical holders to test the tool. Nobody is being hired and no budget is set aside for them. They are unpaid contributions from people who think the problem is worth an afternoon, and the work is specified and open precisely so that an afternoon is enough.

Method

How progress is verified.

A grant is a claim about the future, so the thing worth offering is a record of how claims get checked. Three practices the work is held to.

01

Corrections are written down in public

When something turns out to be wrong, the correction is recorded where the mistake was, not quietly overwritten. The conformance suite's own notes explain why its passing result is weaker evidence than it looks. The scheduling code opens by recording that an earlier plan cited the wrong source. The threat model states on its own face that nobody outside the project has reviewed it.

02

Specification before implementation

The commitment format is pinned by conformance vectors derived independently of the code that implements it, so an outside developer can check their own build against the reference rather than taking it on trust.

03

Independent review before release

Finished components are handed to an independent reviewer briefed to test them rather than confirm them. Nothing is released until every finding is closed and covered by a regression test that holds it closed.

Every finding closed and regression-tested