Tinab Consensus · the paper

A trust network with no boss, to say whether an object is authentic or fabricated

Two layers, kept apart on purpose: the protocol (how agreement is reached) and the client (how a human enters). The site signs nobody up: you install the app.

A · The protocol

A.1 What it is, and what it is not

Tinab attests objects: a sentence, a photo, a document, a video. Each judge votes authentic or fabricated. It is not an automated AI detector, and—as the name Tinab quietly hints—This Is Not Another Blockchain.

We reuse the slices and quorums of the Stellar Consensus Protocol (Mazières, §§3–4): each person picks a small group of judges, and a quorum is a set that contains a slice of each of its members. We do not reuse the “accept” then “confirm” steps of §5. A node votes authentic or fabricated. The seal you see depends on your slice: enough of your judges voted authentic → ratified authentic. Otherwise, no. We do not display “blocked”, “split”, or “ratified fake”. One key, one voice. A key may publish several signed slices; any of them can form a quorum — including a slice of a single node (threshold 1). That does not multiply votes. Changing side is refused. At most 32 ballots per claim.

We do not sell the weight of a vote. There is no “bigger quorum” to buy.

A.2 Two identities, not one

App. The phone number, unique, normalized to E.164. As with Signal: you prove the number, you are that person in the app directory. The phone’s address book becomes your contact list.

Protocol. An Ed25519 pair. The node is the public key (paper §3.1). Messages are signed by the private key. At signup you choose: either a copy stays on the relay (reconnect with a code), or it never leaves the device — then you write down the ASCII form (64 hex) or the 24 BIP39 words, the same 32-byte secret. The short fingerprint k_ plus twelve hex digits is only a display nickname. The phone number never enters a quorum.

Profile. A display name and a description. They are not identifiers. Two people can both be called Léa.

A.3 A typical slice is four nodes

A default quorum slice is you plus three others — four nodes, threshold 3. Like the first group in the demo (Le Sceau, the Forensic image lab, Nord, the Archives chamber). It is not “three quarters of your whole address book”: thirty contacts do not mean twenty-three votes are required.

Contacts and example bots fill those three seats. You can remove one with a gesture, or add one by browsing (like a follow). Explicit follows stay even past four; the threshold stays 3 once the slice has at least four members.

The feed shows what those people created, or what they replied to. A brand-new account, with no signed-up contacts, has an empty feed. That is intended, as in a messenger.

Exclude someone from the address book is still possible — a number in the phone is not automatically someone whose judgment you accept. That list is kept a little out of the way. It is not the home screen.

Outside the address book. You can browse the network and add a node by its display name or its public key (the k_… id). A lab, a newsroom, a bot: they do not need to be in your phone contacts.

B · The client

B.1 Who speaks where

Humans. The Android app. Download tinab.apk and open it in Mes fichiers. Sign-in is a phone number and a code, as with WhatsApp or Signal. Address-book import (contacts permission). Messages are handled on the device.

Browser. This site, this paper, and a mirror paired by QR from the app you already opened. No signup form on the site. The mirror does not read the address book: the phone sends it the session.

Bots and organizations. The HTTP relay. A key, not necessarily a phone number. A bot appears in a human feed only if a contact created or replied to its object.

B.2 The relay is an archive, not a judge

The server stores every message: nodes, objects, votes, slices. The app asks for what concerns it — first the authors in its address book and their replies — and recomputes the seal locally: a quorum of authentic votes, or not. The relay’s tally is only a cache for bots in a hurry.

A media object is not a URL you can edit. It is a SHA-256 or an IPFS CID. A Google Docs link is refused.

B.3 Seeds, as in Bitcoin

To find the network, a client starts from a short list of relay addresses that know the nodes. That is not the list of every phone. It is the list of archives. At the start there is one: ours, tinab.com:443 (217.154.15.108).

Raw file: /seeds.txt. JSON: /api/v1/seeds.

B.4 Authentication and key custody

You give a number. A six-digit code checks it. You confirm. The number is unique. Another key cannot take it. Display name and description are set after.

Two kinds of custody, chosen at creation. Relay: the app also sends the private key; a code on the same number returns it. Device: the relay receives only the public key. To reopen the node, you present the 24 words or the ASCII key. The app derives the public key, signs a challenge cercle.recover/1, and the relay opens the session. Lose the words and the device, and you lose the node.

The browser does not repeat that path. It shows a token / QR code. The app confirms it. That is a mirror, not a second account.

B.5 What the app actually does

  1. 1 · Number

    It opens, asks for the number, checks the code.

  2. 2 · Key

    It creates or finds the local key. The protocol identity does not move.

  3. 3 · Judges

    It reads the address book, sends the numbers to the relay, and receives the nodes already signed up. Those are your Tinab contacts.

  4. 4 · Feed

    It asks for the journal filtered on those ids, and shows the objects they created or replied to.

  5. 5 · Seal

    When you vote or file something, it sends a message to the relay and updates its local seal.

B.6 Navigation

The feed stays what your contacts created or replied to. Search reads the relay’s whole archive: claims, nodes, keys — not only the address book.

You open a claim to see the state and who voted what. You open a node to see its ballots. A vote opens the signed message cercle.vote/1: node = public key, object = SHA-256 of the claim or the file, q = 𝐐(𝑣) (paper §5.1), Ed25519 signature. The display name, the description, and the internal claim id are a hint outside the signature — a label, not the protocol. Adding someone to your slice works like a follow.

C · Worked examples and limits

C.1 Five worked examples

The same situations as on the first demo feed. The names are the example network: the newsroom Le Sceau, the Forensic image lab (Atelier Forensic), Collectif Nord, the Archives chamber, Iris Benali, Clara Voss, Malik Renard, Léa Horton, Noura K., Paul M., and the two islands East / West. You can replay a case, clear the votes, or vote in a node’s place — without signing up. Nothing is sent to the relay.

v-blocking means a set of nodes that stops the other side from concluding (paper §5.3). It is not a video filter.

The seal is computed here, in the browser: slices, signed votes, an authentic quorum. A node does not take its vote back.

C.2 Safety, as it stands

If your slices do not intersect the others, two islands can each ratify on their own side. That is not a bug: the paper says so (figure 6). The human screen only shows “ratified authentic” or not — not “split”.

A node that has voted does not take the vote back. That is the promise of §5.

C.3 For machines

A machine registers with an Ed25519 key, no phone number, and receives a Bot … token. Identified reads and deposits spend a monthly quota. A vote is never billed. Recipe: /agents and /AGENTS.md.

Reference: David Mazières, The Stellar Consensus Protocol, 25 February 2016, §§3–5.