Consensus et blocs

La chaîne Velum produit des blocs à tour de rôle entre les nœuds complets actifs, avec un objectif de 2 secondes par créneau. Le rythme réel est mesuré : l’explorateur et la page d’accueil affichent la moyenne récente. À chaque époque (1 800 blocs, environ une heure30 blocs, environ 60 secondes), les nœuds découvrent les VEL de cette époque grâce à leur travail vérifié.

Tours

Le temps est découpé en créneaux de 2 s (l’objectif) depuis la genèse (slot = floor((ts − genèse) / 2000)). Pour chaque créneau, tous les nœuds calculent le même ordre de passage :

actifs = nœuds complets inscrits avec un signe de vie dans les 15 derniers blocs
ordre  = actifs triés par sha256(hash_bloc_précédent | slot | adresse)
  • Le premier de l’ordre (rang 0) propose le bloc au début du créneau.
  • Les suppléants attendent une demi-seconde par rang (rang × 500 ms) avant de pouvoir proposer.
  • Un bloc signé avant son tour est rejeté.

L’ordre change à chaque bloc (il dépend du hash précédent) : personne ne sait à l’avance quand ce sera le tour de qui.

Signes de vie

Chaque nœud signe régulièrement un signe de vie (presence : nœud, hauteur, heure). Ces signes entrent dans les blocs et définissent qui est actif. Ils comptent aussi pour la disponibilité, l’une des conditions de niveau.

La chaîne ne s’arrête pas

Si les nœuds actifs s’éteignent tous en même temps, chaque créneau vide fait avancer d’un rang tous les autres. En quelques créneaux, n’importe quel nœud inscrit peut continuer à produire. Les nœuds légers ne produisent jamais de blocs : ceux qu’ils signeraient sont rejetés.

Époques

Dans le dernier bloc de chaque époque :

  1. On additionne ce qu’il y a à découvrir : émission de l’époque, 80 % des frais conservés et les 0,1 % que reverse la Réserve du réseau.
  2. 15 % sont découverts par ceux qui ont produit et validé des blocs, à parts égales par bloc.
  3. 85 % sont découverts par ceux qui ont ouvert des ponts : livraisons vérifiées × multiplicateur de niveau.
  4. Les cagnottes de tokens (pool.fund) encore actives sont libérées.
  5. La difficulté (travail vérifié / VEL émis) et le prix de l’oracle sont publiés.
  6. Les ordres du marché dont le ttl est échu expirent.

Le travail de chaque nœud n’entre pas reçu par reçu : chaque nœud publie une réclamation agrégée (work.claim) avec la racine de Merkle de ses reçus, et l’époque suivante vérifie 16 reçus au hasard (work.prove). Voir Monter un nœud.

Sur le réseau de test, une époque dure une minute ; sur le réseau principal, une heure.Sur le réseau principal, une époque dure une heure (1 800 blocs).

Voir La monnaie VEL pour l’émission et Monter un nœud pour les niveaux.

Choix de chaîne et réorganisations

Quand deux blocs se disputent la même hauteur, la règle tranche :

meilleure = la chaîne la plus haute ; à hauteur égale, le bloc au plus petit hash

Un nœud qui voit une meilleure branche bascule dessus (réorganisation). Grâce au système de tours, les réorganisations sont courtes : en général un ou deux blocs, quand deux suppléants proposent presque en même temps. L’indexeur de l’explorateur garde les états récents pour les suivre et marque les blocs écartés comme « branche abandonnée ».

Finalité {#finalidad}

Sur {{chain}}, la finalité est probabiliste : plus un bloc a de blocs au-dessus de lui, plus il est improbable qu’il soit écarté.

Usage Confirmations recommandées Durée approximative
Messages, petits paiements entre particuliers 1 Un bloc
Commerces et passerelles de paiement 6 Quelques secondes
Plateformes d’échange, montants courants 30 ≈ 1 min au rythme visé
Plateformes d’échange, gros montants Une époque ≈ 1 h sur le réseau principal

La finalité immédiate avec les signatures des 2/3 des validateurs est dans la feuille de route du réseau principal.

Structure d’un bloc

BlockHeader = { chain, height, prev, ts, slot, proposer, txRoot, receiptRoot, presenceRoot, stateRoot }
Block       = { header, hash, sig, txs[], receipts[], presence[], rewards[], tokenRewards?[] }
hash        = sha256(JSON canonique du header)
sig         = ed25519 du proposant sur le hash

Les racines sont des arbres de Merkle (SHA-256) des transactions, des reçus et des signes de vie. stateRoot est l’empreinte de l’état complet après application du bloc : deux nœuds honnêtes aboutissent toujours au même.