Notary Overview
This section explains the current Bookcicle Notary model across the web app and Bookcicle Desktop.
The current product spans two main surfaces:
- the web app
- the desktop app
Core Model
At a high level, Notary has four core pieces:
| Piece | Meaning |
|---|---|
| Local Proofs | Proofs created on the user's device first, either in the browser or on desktop |
| Cloud Proof | A proof created directly through Bookcicle's remote notary endpoints |
| Attest | The server workflow that upgrades a local proof by issuing a signed receipt |
| Anchors | The remote workflow that adds a public anchor to a cloud proof or an attested proof |
In the current product and API surface, Attest is the server workflow that issues the Bookcicle receipt for an existing local proof.
The current web app labels do not fully use this broader model language yet. The web surface still exposes source labels such as Local browser proof and Local proof attest, even though the product model is broader than browser-only local proofs.
The current UI labels support this model directly:
localbecomes Local proofattestedbecomes Attestedverifiedbecomes Verified- anchor states map to Anchor queued, Anchoring, and Anchored
Main Artifacts
The current product works with these artifacts:
| Artifact | Purpose |
|---|---|
| Local proof | Local proof record created from bytes or file content |
| Receipt | Bookcicle-signed cloud response tied to the proof |
| Proof capsule | Portable bundle for later verification |
| Original bytes | Optional stored file bytes, depending on storage mode |
| Anchor artifact | Extra output from the anchoring step |
| Checkpoint | Local snapshot of exact bytes used for proofs in desktop workflows |
Storage Modes in the Web App
The web app exposes three remote storage modes:
| Mode | Meaning |
|---|---|
RECEIPT_ONLY | Receipt only |
STORE_TREE | Receipt plus verification data |
STORE_BYTES | Receipt, verification data, and original file bytes |
For local proofs created in the web app, the current storage choice is:
- no backup bytes
- backup original bytes into notary storage
Main API Surface
The main notary endpoints in use today are:
POST /notary/attest/initPOST /notary/attest/completePOST /notary/attestPOST /notary/proofs/{proofId}/anchorGET /notary/proofs/{proofId}GET /notary/proofs/{proofId}/receiptPOST /notary/proofs/{proofId}/verify
Attest contract
The current product uses two Attest patterns:
- Two-step upgrade for an existing local proof
POST /notary/attest/initPOST /notary/attest/complete- then
GET /notary/proofs/{proofId}/receipt
- Direct server-side attest
POST /notary/attest
The response can include:
proofIdmerkleRootattestedProofreceiptanchor
So Attest is not just a UI word. It is the server-issued receipt flow.
Anchor contract
The remote anchor path is exposed through:
POST /notary/proofs/{proofId}/anchor
That endpoint is the upgrade step for proofs that already exist in the cloud, including direct cloud proofs and local proofs that were already attested.
Verification Model for Receipts
Desktop verification currently checks Attest receipts in two important ways:
- Offline: compare the receipt merkle root to the local proof merkle root
- Online: verify the server receipt signature publicly, then optionally compare the fetched authoritative cloud receipt to the embedded one when auth is available