Propunerea care a schimbat Midnight pentru mine a fost directă: o tranzacție poate eșua în faza supusă greșelii și totuși să lase efecte garantate în urmă.

Odată ce am citit asta, nu am putut să mă întorc la modelul mental normal de criptomonedă. Documentele Midnight spun că tranzacțiile trec printr-o verificare a corectitudinii, apoi printr-o fază garantată, iar apoi printr-o fază supusă greșelii. Dacă apare o eroare în faza garantată, tranzacția nu este inclusă. Dar dacă eroarea apare mai târziu, efectele garantate încă se aplică și registrul contabil înregistrează un succes parțial. Documentele mai spun că taxele pentru toate fazele sunt colectate în faza garantată și sunt pierdute dacă faza supusă greșelii eșuează. Asta înseamnă că eșecul pe Midnight nu este întotdeauna o revenire. Uneori este un reziduu.

Asta este un fapt de produs mult mai mare decât pare la prima vedere.

Multe persoane încă se gândesc la eșecul tranzacțiilor în termeni simpli. A funcționat sau a eșuat și nimic nu s-a întâmplat cu adevărat. Midnight slăbește acel scurtătură. Semantica sa este etapizată. Unele părți ale acțiunii pot deveni reale înainte ca părțile ulterioare să fie permise să eșueze. Documentele sunt clare că execuția în faze poate include lucruri precum inserarea angajamentelor, inserarea anulărilor, verificarea rădăcinilor anterioare și actualizarea setului de rădăcini anterioare. Așa că, până când o condiție eronată se sparge, tranzacția poate să fi schimbat deja starea registrului în moduri pe care aplicația nu le poate pretinde.

Taxa a dispărut deja.

Acea combinație este ceea ce face modelul serios. Un eșec târziu nu este doar un mesaj de eroare. Poate fi un plan eșuat așezat deasupra unui prefix de succes.

Cea mai clară modalitate de a vedea problema este cu un flux de acces privat. Imaginează-ți o aplicație Midnight în care un utilizator încearcă să exercite o anumită permisiune privată. Aplicația vrea ca acțiunea să pară simplă. Utilizatorul apasă o dată și se așteaptă la un răspuns clar. Totuși, în spatele ecranului, tranzacția poate să treacă de validare, să intre în faza garantată, să colecteze taxe și să aplice efectele care îi aparțin. Apoi, o condiție eronată ulterioară eșuează. Poate că o regulă de afaceri nu a fost satisfăcută. Poate că o ramură ulterioară nu a putut fi finalizată. Din punctul de vedere al utilizatorului, acțiunea a eșuat. Din punctul de vedere al Midnight, eșecul a sosit după ce registrul s-a mutat deja.

Asta nu este un caz de margine semantică mică. Asta este comportamentul produsului.

Și Midnight nu tratează acel divizor ca fiind accidental. Documentele spun că dacă un apel de contract conține atât secțiuni garantate cât și secțiuni eronate, secțiunea eronată trebuie să înceapă cu ckpt. Îmi place acel detaliu pentru că face arhitectura onestă. Linia dintre „asta trebuie să supraviețuiască” și „asta poate să se anuleze” este explicită. Constructorii nu decid doar ce face logica lor privată. Ei decid ce este permis sistemului să păstreze dacă intenția completă nu ajunge niciodată.

Asta este locul unde începe presiunea de design.

Un constructor poate să se uite la un contract Midnight, să vadă că dovezile sunt corecte și totuși să rateze întrebarea mai dificilă. Dacă această acțiune eșuează târziu, ce a devenit deja adevărat. Dacă răspunsul este „unele angajamente, unele anulări, taxa și un record parțial de succes”, atunci aplicația nu poate vorbi despre eșec la fel cum ar face un sistem normal de rollback. Logica de retry se schimbă. Mesajele pentru utilizatori se schimbă. Suportul se schimbă. O stare de eroare roșie nu mai poate însemna „nu s-a întâmplat nimic.”

Asta este adevărata compromis. Midnight obține un model de tranzacție mai expresiv. Lucrările garantate pot fi separate de lucrările eronate ulterioare. Asta este util. Oferă constructorilor mai mult control asupra structurii execuției. Dar prețul este că aplicațiile trebuie să proiecteze în jurul succesului parțial ca o stare de primă clasă. Nu o eroare. Nu un accident de implementare. O stare.

Dacă nu o fac, produsul începe să mintă.

Utilizatorul vede „eșuat.” Registrul spune „parțial completat.” Taxa este dispărută în ambele cazuri. Acea diferență este de unde începe confuzia. O echipă poate să o interpreteze greșit, de asemenea. Ei pot trata problema ca pe un eșec normal în timpul execuției, când adevărata problemă este că modelul de tranzacție a permis unor efecte să supraviețuiască prin design. Midnight nu a ascuns asta de ei. Documentele le-au spus. Greșeala este să pretinzi că experiența utilizatorului poate rămâne totul sau nimic după ce semantica a încetat să mai fie totul sau nimic.

De aceea cred că modelul de execuție al Midnight merită mai multă atenție decât primește. Oamenii vor vorbi despre confidențialitate, divulgare selectivă și ce poate rămâne ascuns. Bine. Dar un produs serios nu este definit doar de ce poate ascunde. Este de asemenea definit de ce permite eșecului să însemne. Midnight schimbă acel sens într-un mod foarte exact. O acțiune privată eșuată poate avea totuși o primă jumătate ireversibilă.

Așadar, standardul real de recenzie nu poate să se oprească la „verifică dovada”. De asemenea, trebuie să întrebe: ce efecte au fost plasate în faza garantată, ce supraviețuiește în caz de eșec târziu și explică aplicația asta onest utilizatorului. La Midnight, acestea nu sunt detalii UX secundare. Ele fac parte din semantica.

Cele mai puternice aplicații Midnight vor fi cele care tratează succesul parțial ca o stare reală a produsului din prima zi. Cele mai slabe vor continua să o numească eșec și speră că nimeni nu va observa că registrul s-a mutat deja.

@MidnightNetwork $NIGHT #night

NIGHT
NIGHT
0.04138
-0.95%