> Source: https://upvera.tech/roots/
> Upvera Day Roots seals Upvera's activity and money movements into minute blocks and publishes one root a day that anyone can check from their own browser.

UTR-26-03 · System report · Live · block@1

# Upvera Day Roots

Upvera Day Roots seals Upvera's activity and money movements into minute blocks and publishes one root a day that anyone can check from their own browser.

## Summary

Upvera cannot quietly rewrite its own history. Every minute is sealed into a block, every day ends in a root, and every root is published where Upvera can't take it back.

Prime, comments, follows, posts, lending and folding a wing: everything that happens on Upvera lands in one of two append-only ledgers. A wing is not an investment. UPV stays inside Upvera and can't be cashed out. Both are sealed together into minute blocks. At the end of each day the blocks yield one root, chained to the previous day, written to a public GitHub repository and timestamped with OpenTimestamps. Since the genesis on October 13, 2026, the chain has not missed a day.

The files contain digests only. No counts, no names. Anyone can check the chain; each person can check that their own actions are inside it.

## Two ledgers

### The event record

Every interaction is written once, with a time the server sets. A client cannot backdate anything, and a retried request cannot write the same event twice. When an account is deleted, everything that links the record to that person is removed, so what remains is anonymous.

### The money ledger

Every movement of UPV, Upvera's in-app credit, is a group of entries between named accounts that sums to exactly zero. Amounts are integers in units of one hundred-millionth of a UPV. Mistakes are corrected with reversing entries, never edits. No balance can change without its ledger entry.

## Minute blocks

Each minute, the new entries of both ledgers become the leaves of a Merkle tree, hashed with SHA-256 in the structure defined by RFC 6962. A block carries its root and the digest of the block before it, so the blocks form one chain.

Leaves are built so that showing one reveals nothing else. Public interactions are recorded under scoped aliases, not names, and their contents as salted commitments. Private kinds of activity, such as views and saves, are sealed like everything else but never proven one by one; in public they appear only as aggregates of five or more.

## The day file

At the end of each day the day's blocks produce a single file with exactly eight fields. This is the latest one, byte for byte as it sits on GitHub:

```
{"checkpoint":"f1f4ccb5e82047b7a3a67b47abd2e25d53e63fe876a2f3bea2f4e82c7542974e","day":"2026-10-21","prev":"eb16b5ff0c25de5ec46a281e528401fc50a5773d5cdaf9066437bf9ed26d73b7","root":"28f8cb9f18010d7fb5ac3aa39810bd0035c4405c9deb162edde44954209bf625","rules_hash":"5ae2f2cfcd61bbec8e4dc3b15ef96397e01890fbe103e26fc59b61044d7c359c","t":"d","tip":"21039fbb77ba99109c0bc5f64997e26159898b52777d6ef0671e152d5c062cc6","v":2}
```

-   `root` is the Merkle root of the day's block digests, and `tip` is the digest of its last block.
-   `prev` is the digest of the previous day's file; the first day points to `genesis.json`.
-   `checkpoint` is a digest over every account balance at the end of the day.
-   `rules_hash` is the head of the [rule registry](/releases/) at the end of the day, so each root names the rules it was sealed under.

A day's digest is `sha256("upvera/day/v1\n" ‖ JCS(file))`, the file serialized as canonical JSON. Change one character anywhere in the history and every later `prev` stops matching.

## Publication

Day files are committed to [github.com/upvera-co/ledger-roots](https://github.com/upvera-co/ledger-roots), a public repository where force pushes and deletions are blocked and history must stay linear. Only one workflow writes to it, and its actions are pinned by commit. Each file is also stamped with [OpenTimestamps](https://opentimestamps.org), which anchors its digest in Bitcoin and proves it existed at that moment.

A rewrite after publication would no longer match the root on GitHub, and the timestamp can't be moved. That is the whole guarantee, and it doesn't depend on trusting Upvera.

## Copies and the watch

Finalized ranges of the money ledger and the blocks are copied within minutes to a separate locked store that the database cannot write to. An independent verifier with no database access reads that copy back, and restore drills replay it into a fresh database.

Every hour, a watcher runs 46 invariant checks: that every transfer sums to zero, that supply equals what was issued minus what was retired, that cached balances equal their entries, that the append-only guards are intact, that the blocks are continuous, and that the running code matches the rules in the registry. A failure raises a critical alarm.

## Your own record

On app.upvera.co, under Settings › Security › Proofs, you can take a proof that one of your own public actions is inside a closed day. Check it at [upvera.co/dogrula](https://upvera.co/en/dogrula/), where a Rust verifier compiled to WebAssembly fetches the day file from GitHub and checks the proof in your browser. Proofs of your money receipts are shown only to you, inside the app.

## Every day, verified here

| Day | Root | Day digest | Rules in force |  |
| --- | --- | --- | --- | --- |
| 2026-10-21 |  |  | days@1 |  |
| 2026-10-20 |  |  | days@1 |  |
| 2026-10-19 |  |  | days@1 |  |
| 2026-10-18 |  |  | days@1 |  |
| 2026-10-17 |  |  | value.shadow@2 |  |
| 2026-10-16 |  |  | money@18 |  |
| 2026-10-15 |  |  | money@18 |  |
| 2026-10-14 |  |  | money@18 |  |
| 2026-10-13 |  |  | watch@13 |  |

**Fig. 1.** Every published day since genesis. Verify fetches each file from GitHub, checks that it is canonical, recomputes its digest and confirms that the next day points to it. It only reads public files.

## By the numbers

**1 min**per block, across both ledgersblock@1, live 2026-10-13

**10⁻⁸**UPV, the smallest unit in the money ledgerInteger amounts, no fractions

**46**invariant checks every hourwatch@13

**8**fields in a day file, all of them digests or datesblock@1

## Published and private

Published

-   A root, a tip, a checkpoint and the rule head for every day
-   The chain from genesis, with OpenTimestamps proofs
-   The verification tool, with no dependencies
-   Your own inclusion proof, on request

Kept private, on purpose

-   Counts of blocks, interactions or money movements; a file with counts would describe the business, not the record
-   Names and identifiers; leaves hold aliases and salted commitments
-   Private activity, except as aggregates of five or more
-   The keys behind the aliases

## Status and releases

Sealing has been live since October 13, 2026 at 15:56:44 UTC. The first roots were published on October 17, 2026, beginning with genesis.

1.  [2026-10-17 01:11**Day roots go public**The first day roots land on GitHub with OpenTimestamps proofs. Anyone can check the chain.Live](/releases/roots-published/)
2.  2026-10-13 17:35**watch@13**The watch covers replaying blocks after a disaster.Live
    
3.  [2026-10-13 15:56**Minute sealing begins**Both ledgers are sealed into minute blocks. Genesis at 15:57 UTC.Live](/roots/)
4.  2026-10-13 15:41**block@1**Day files carry roots only. No counts, no personal data.Live
    
5.  2026-10-11 14:39**block@0**The blocks layer is installed, switched off.Live
    
6.  2026-10-10 07:57**money@5**The ledger becomes the source of truth for every balance.Live
    
7.  [2026-10-09**Core Contract v1**133 binding rules in 15 families, locked by a hash. Amendments are appended, never edited.Live](/research/rules-released-like-software/)
8.  [2026-10-09 13:25**External copy of the UPV ledger**Each finalized range is copied within minutes to a locked store the database can't write to, and checked by a verifier with no database access.Live](/roots/)
9.  2026-10-09 09:48**money@0**The money ledger starts in shadow, beside the tables it will replace.Live
    

## Questions

### Is this a blockchain?

No. It is a chain of daily digests with public timestamps. There is no token, no mining and no network of validators. Upvera writes the record; anyone can audit it.

### Could Upvera change its history?

It could change its own database. It could not make the change match the roots already on GitHub, and it could not move the OpenTimestamps proof that each root existed when it did.

### What does a day file reveal about Upvera's activity?

Nothing countable. It holds eight fields, all digests or dates, so it proves integrity without describing volume.

[Next · UTR-26-04**Upvera ID**](/identity/)
