> For the complete documentation index, see [llms.txt](https://docs.bitsafe.finance/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bitsafe.finance/cbtc/concepts-and-reference/proof-of-reserve.md).

# Proof of Reserve

### What this page helps you do

Use this page to:

* Check the published CBTC Proof of Reserve data.
* Understand how the reserve total can be calculated independently from Bitcoin data.
* Identify what the evidence proves and what it does not prove.
* Stop safely when data is stale, incomplete, or inconsistent.

### The reserve claim

CBTC is designed as a Bitcoin-backed asset on Canton Network. The reserve claim is that confirmed Bitcoin reserves cover circulating CBTC on a 1:1 basis.

Use the maintained circulating-supply source, coverage formula, feed denomination, and freshness policy when evaluating the 1:1 reserve claim.

### Check the Chainlink feed

Open the [CBTC / POR Data Stream](https://data.chain.link/streams/cbtc-por-nav-datalink). Chainlink currently identifies it as:

* **Product type:** Proof of Reserve
* **Base asset:** `CBTC_CR`
* **Market hours:** 24/7/365
* **Product name:** `CBTC/POR-Datalink-ProofOfReserves-DS-Premium-Global-009`

To perform a reserve check:

1. Confirm that you opened the CBTC Proof of Reserve product, not a CBTC or BTC price feed.
2. Record the reported reserve value and its observation time.
3. Check the feed's freshness against the approved maximum age.
4. Obtain circulating CBTC supply from the canonical supply source.
5. Compare the reserve value with circulating supply using the approved coverage formula.
6. Save the value, observation time, supply value, supply timestamp, and source links with your review record.

**Expected outcome:** the feed is current and the calculated reserve coverage meets the approved threshold.

If the feed is stale or coverage falls below the applicable threshold, stop and follow the support and incident path in [Security and trust index](https://docs.bitsafe.finance/security-and-trust/).

### How the reserve total is calculated

BitSafe's open-source [CBTC Proof of Reserve tools](https://github.com/DLC-link/cbtc-por-tools) document an independent calculation path. This draft was reviewed at commit [`90496260bc916e482a5539821fdd3070473f0ab8`](https://github.com/DLC-link/cbtc-por-tools/commit/90496260bc916e482a5539821fdd3070473f0ab8), dated 5 July 2026.

At that commit, the calculator:

1. Fetches deposit account IDs and threshold extended public keys from the address-calculation endpoint.
2. Derives each Bitcoin Taproot address independently from the deposit account ID and threshold public key.
3. Compares each derived address with the address reported by the endpoint.
4. Queries a Bitcoin data source for unspent transaction outputs at every verified address.
5. Sums eligible unspent outputs to produce a Bitcoin reserve total.
6. Fails without a reserve total if an address cannot be verified or an on-chain lookup remains incomplete after retries.

The address-calculation endpoint supplies inputs for derivation. It is not the source of Bitcoin balances. The calculator obtains balances from Bitcoin data through an Esplora-compatible service.

At the reviewed commit, the calculator counts outputs with six or more confirmations when current block height is available. Check the maintained release reference for the production confirmation policy.

### Run an independent calculation

{% hint style="info" %}
Review the code and dependencies before you run it in a controlled environment. Do not treat a mutable branch as a stable release.
{% endhint %}

```bash
git clone <https://github.com/DLC-link/cbtc-por-tools.git>
cd cbtc-por-tools
git checkout 90496260bc916e482a5539821fdd3070473f0ab8
npm install
npm run calculate
```

The calculator uses these defaults at the reviewed commit:

* Address-calculation data: `https://api.mainnet.bitsafe.finance/cbtc/v1/address-calculation-data`
* Bitcoin data: `https://blockstream.info/api`

You can set `ADDRESS_CALCULATION_DATA_URL` or `ESPLORA_API` to use approved alternatives. For higher assurance, compare results from two independent Bitcoin data sources or use your own Bitcoin node and compatible indexer.

**Expected outcome:** every address is derived and verified, every Bitcoin lookup completes, and the tool reports one complete reserve total.

**Stop and investigate if:**

* A derived address does not match the reported address.
* Any deposit account cannot be processed.
* A Bitcoin lookup remains unavailable after retries.
* The tool exits without a complete reserve total.
* Independent Bitcoin data sources disagree.

### What this evidence proves

When the inputs are complete and current, the calculation can show:

* Which Bitcoin addresses are deterministically associated with the published deposit account IDs and threshold public keys.
* The confirmed Bitcoin unspent outputs held at those derived addresses at the observation time.
* The summed Bitcoin reserve amount produced from those outputs.
* Whether the observed reserve amount is consistent with the 1:1 claim after comparison with an authoritative circulating-supply value.

### What this evidence does not prove

Proof of Reserve is one control. It does not, by itself, prove:

* The circulating CBTC supply or total liabilities. That requires a separate authoritative supply source.
* That every deposit account and threshold public key supplied to the calculation is complete. The completeness and publication mechanism require Engineering confirmation.
* Future reserve coverage. The result is valid only for its observation time and data freshness.
* That redemption will complete within a specific time or at a specific cost.
* That contracts, signing software, operators, APIs, or operational processes are free of defects.
* Whether the Chainlink feed is used as an automatic minting control, circuit breaker, or redemption control for CBTC.
* That one Bitcoin data provider is correct. High-assurance checks should compare independent sources.

### Handle stale, missing, or inconsistent data

* Do not interpret missing data as a zero balance.
* Do not treat a stale observation as current reserve evidence.
* Do not publish a partial reserve total when any address or Bitcoin lookup failed.
* Record the feed value and timestamp before escalating.
* Re-run the independent calculation with a second approved Bitcoin data source.
* Escalate through the approved support and incident path if the feed is stale, reserve coverage is below the approved threshold, or independent sources disagree.

Use the maintained security and support references for the current freshness threshold, severity levels, contact, incident path, and retry interval.

### Technical sources

* [CBTC / POR Data Stream](https://data.chain.link/streams/cbtc-por-nav-datalink)
* [Chainlink Proof of Reserve overview](https://chain.link/proof-of-reserve)
* [CBTC Proof of Reserve tools](https://github.com/DLC-link/cbtc-por-tools)
* [Reviewed commit](https://github.com/DLC-link/cbtc-por-tools/commit/90496260bc916e482a5539821fdd3070473f0ab8)
* [Current CBTC Data and Price Feeds page](https://docs.bitsafe.finance/product-suite/cbtc/cbtc-data-and-price-feeds.md), used only as a merge target and link inventory

### Related pages

* [How CBTC works](/cbtc/how-cbtc-works.md)
* [CBTC architecture and trust boundaries](/cbtc/concepts-and-reference/architecture-and-trust-boundaries.md)
* [CBTC Attestor Network and FROST](/cbtc/concepts-and-reference/attestor-network-and-frost.md)
* [CBTC security](/cbtc/concepts-and-reference/security.md)

### Next step

👉 **Put the evidence in context:** [Security and trust index](https://docs.bitsafe.finance/security-and-trust/).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.bitsafe.finance/cbtc/concepts-and-reference/proof-of-reserve.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
