Odata cu trecerea timpului (sic), am auzit de mai multe ori termenii: “odata la 4 ani”, “ajustarea dificultatii se face la doua saptamani”, “un block survine odata la 10 minute” etc, vis a vis de reteaua Bitcoin si modul de operare al acesteia.

Pentru o informatie corecta si o intelegere mai buna a sistemului ma simt oarecum obligat sa clarific acest concept si anume timpul in Bitcoin, pentru toti cei care au putin de pierdut pentru a citi aceste randuri.

Definim ca CEAS orice sistem care arata timpul exact, intr-un standard predefinit, la anumite intervale (egale sau nu).

Bitcoin 101!

Ca aproape toate sistemele care folosesc timestamp (metaforic “poza unui ceas care arata timpul exact”), Bitcoin foloseste acest sistem pentru a arata o anumita ora la care S-A PRODUS un anumit eveniment. Particularitatea principala este ca Bitcoin nu foloseste acest sistem ca o definitie imutabila a codului ci prin intermediul celor care sustin reteaua (minerii care gasesc block-uri valide).

Fiind la baza un simplu cod care, utopic, ar trebui rulat de toti cei care participa la retea, in Bitcoin se foloseste Epoch Time (cunoscut ca si Unix Time, POSIX Time, Unix Epoch Time) – definit ca numarul de secunde trecute de la Unix Epoch (00:00:00 UTC la 1 Ianuarie 1970) minus anumite secude exceptie.

Timpul in bitcoin are 2 conceptii diferite

Time: definit ca timestamp, este timpul ales de miner pentru imprintarea lui intr-un block nou, considerat valid de catre retea

Median Time: definit ca timp mediu, este timpul (calculat prin medie aritmetica de catre cod) in care au survenit ultimele 11 block-uri valide.

Timpul Median fiind un proces ireversibil chiar si in Bitcoin, avem cateva conditii care trebuie satisfacute atat de cei care vor sa imprinteze un timp nou in retea cat si de cod in sine:

  1. Time (timestamp) trebuie sa fie mereu mai mare decat Median Time de unde rezulta ca Median Time este in continua crestere
  2. Time (timestamp) este ales de mineri si are anumite restrictii: nu poate sa fie prea mult in viitor (mai mult de 2 ore) dar nici prea mult in trecut (mai mic decat median time). De aici rezulta ca Time nu este neaparat un timp crescator pe masura ce block-urile se succed.

Ce se poate intampla?

Putem avea un block “x+1” care sa aiba un Time (timestamp) mai “IN TRECUT” decat un block “x” atata timp cat regulile sunt urmate.

Cu toate ca putem considera Bitcoin ca fiind un ceas, trebuie considerat si unul descentralizat, unde comunitatea spune ora, exacta sau nu, dupa standardele deja cunoscute.

Un ceas care merge inapoi nu prea e un ceas care se supune definitiei, nu?

Expresiile “odata la 4 ani”, “ajustarea dificultatii se face la doua saptamani”, “un block survine odata la 10 minute” sunt corecte in reteaua Bitcoin doar in conditii ideale, fapt aproape imposibil, insa daca la fiecare expresie adaugam “aproximativ”, ca prin magie devin universal corecte avand in vedere relativitatea timpului perceputa de om. O abordare infailibila ar fi sa ne referim la aceste perioade direct in numar de block-uri, acolo unde este posibil. ( 210.000 block-uri pentru halving, 2016 block-uri pentru ajustarea dificultatii )

Notiunea de “timp” a creat anumite probleme in retea pentru cei care o sustin si permit evolutia acesteia, regulile fiind facute pentru a fi incalcate sau ocolite. BIP113 a fost un softfork al retelei care s-a ocupat putin de minerii care minteau in legatura cu Time (timestamp) pentru a include in block-uri tranzactii de tipul locktime (poprire) inainte ca acestea sa se fi maturizat.

Poze cu screenshot-uri din rezultatele date de nodul de retea.

Va recomand o lectura interesanta pe aceasta tema.