TON: Rete aperta di Telegram. Parte 2: Blockchain, sharding

TON: Rete aperta di Telegram. Parte 2: Blockchain, sharding

Questo testo è la continuazione di una serie di articoli in cui esamino la struttura della (presumibilmente) rete distribuita Telegram Open Network (TON), che si sta preparando per il rilascio quest'anno. IN sezione precedente Ho descritto il suo livello più elementare: il modo in cui i nodi interagiscono tra loro.

Per ogni evenienza, lascia che ti ricordi che non ho nulla a che fare con lo sviluppo di questa rete e tutto il materiale è stato raccolto da una fonte aperta (anche se non verificata) - documento (c'è anche un allegato opuscolo, di cui si delineano brevemente i punti principali), apparso alla fine dello scorso anno. La quantità di informazioni contenute in questo documento, a mio avviso, ne indica l'autenticità, sebbene non vi sia alcuna conferma ufficiale di ciò.

Oggi esamineremo il componente principale di TON: la blockchain.

Concetti di base

Acconto (conto). Un insieme di dati identificato da un numero a 256 bit Account ID (molto spesso si tratta della chiave pubblica del proprietario dell'account). Nel caso base (vedi sotto catena di lavoro zero), questi dati si riferiscono al saldo dell'utente. Specifico "occupare". Account ID chiunque può, ma il suo valore può essere modificato solo secondo determinate regole.

Contratto intelligente (contratto intelligente). In sostanza, si tratta di un caso speciale di account, integrato con il codice del contratto intelligente e la memorizzazione delle sue variabili. Se nel caso di un "portafoglio" puoi depositare e prelevare denaro da esso secondo regole relativamente semplici e predeterminate, nel caso di un contratto intelligente queste regole sono scritte sotto forma di codice (in un certo Turing-complete linguaggio di programmazione).

Stato della blockchain (stato della blockchain). L'insieme degli stati di tutti gli account/contratti intelligenti (in senso astratto, una tabella hash, dove le chiavi sono identificatori di account e i valori sono i dati archiviati negli account).

Messaggio (messaggio). Sopra ho usato l'espressione "denaro di credito e di debito" - questo è un esempio particolare di messaggio ("bonifico N grammi dal conto conto_1 per conto conto_2"). Ovviamente solo il nodo che possiede la chiave privata dell'account può inviare un messaggio del genere conto_1 - e in grado di confermarlo con una firma. Il risultato della consegna di tali messaggi a un account normale è un aumento del suo saldo, e il risultato del contratto intelligente è l'esecuzione del suo codice (che elaborerà la ricezione del messaggio). Naturalmente sono possibili anche altri messaggi (trasferimento non di importi monetari, ma di dati arbitrari tra contratti intelligenti).

transazione (delle transazioni). Il fatto che un messaggio venga consegnato è chiamato transazione. Le transazioni cambiano lo stato della blockchain. Sono le transazioni (record di consegna dei messaggi) che compongono i blocchi nella blockchain. A questo proposito, puoi pensare allo stato della blockchain come a un database incrementale: tutti i blocchi sono "differenze" che devono essere applicate in sequenza per ottenere lo stato corrente del database. Le specifiche per impacchettare questi "diff" (e ripristinarne lo stato completo) saranno discusse nel prossimo articolo.

Blockchain in TON: cos'è e perché?

Come accennato nell’articolo precedente, blockchain è una struttura dati, i cui elementi (blocchi) sono ordinati in una "catena", e ogni blocco successivo della catena contiene un hash del precedente. I commenti hanno posto la domanda: perché abbiamo bisogno di una tale struttura di dati quando disponiamo già di un DHT, una tabella hash distribuita? Ovviamente alcuni dati possono essere memorizzati nel DHT, ma questo è adatto solo per informazioni non troppo “sensibili”. I saldi di criptovaluta non possono essere archiviati in DHT, principalmente a causa della mancanza di controlli integrità. In realtà, l’intera complessità della struttura blockchain cresce per evitare interferenze con i dati in essa archiviati.

Tuttavia, la blockchain in TON sembra ancora più complessa rispetto alla maggior parte degli altri sistemi distribuiti, e per due ragioni. Il primo è il desiderio di ridurre al minimo la necessità di forchette. Nelle criptovalute tradizionali, tutti i parametri sono fissati nella fase iniziale e qualsiasi tentativo di modificarli porta effettivamente alla nascita di un “universo di criptovalute alternative”. Il secondo motivo è il supporto per la frantumazione (sharding, sharding) blockchain. La Blockchain è una struttura che non può ridursi nel tempo; e solitamente ogni nodo responsabile del funzionamento della rete è costretto a memorizzarlo completamente. Nei sistemi tradizionali (centralizzati), lo sharding viene utilizzato per risolvere tali problemi: alcuni record nel database si trovano su un server, altri su un altro, ecc. Nel caso delle criptovalute, tale funzionalità è ancora piuttosto rara, soprattutto a causa del fatto che è difficile aggiungere lo sharding a un sistema dove non era originariamente previsto.

Come intende TON risolvere entrambi i problemi di cui sopra?

Contenuti blockchain. Catene di lavoro.

TON: Rete aperta di Telegram. Parte 2: Blockchain, sharding

Prima di tutto, parliamo di cosa si prevede di archiviare nella blockchain. Gli stati dei conti (“portafogli” nel caso base) e i contratti intelligenti verranno archiviati lì (per semplicità, supponiamo che sia lo stesso degli account). In sostanza, questa sarà una normale tabella hash: le chiavi in ​​essa contenute saranno identificatori Account IDe i valori sono strutture di dati contenenti cose come:

  • equilibrio;
  • codice smart contract (solo per smart contract);
  • archiviazione dei dati dei contratti intelligenti (solo per contratti intelligenti);
  • statistiche;
  • (opzionale) chiave pubblica per i trasferimenti dal conto, per impostazione predefinita account_id;
  • coda dei messaggi in uscita (qui vengono inseriti per l'inoltro al destinatario);
  • un elenco degli ultimi messaggi recapitati a questo account.

Come accennato in precedenza, i blocchi stessi consistono in transazioni: messaggi recapitati a vari account account_id. Tuttavia, oltre a account_id, i messaggi contengono anche un campo a 32 bit workchain_id — il cosiddetto identificatore catena di lavoro (catena di lavoro, blockchain funzionante). Ciò ti consente di avere più blockchain indipendenti l’una dall’altra con diverse configurazioni. In questo caso, workchain_id = 0 è considerato un caso speciale, catena di lavoro zero — sono i saldi in esso contenuti che corrisponderanno alla criptovaluta TON (Grammi). Molto probabilmente, all’inizio, non esisteranno affatto altre catene di lavoro.

Catene di frammenti. Paradigma di Sharding Infinito.

Ma la crescita del numero di blockchain non si ferma qui. Affrontiamo lo sharding. Immaginiamo che a ogni account (account_id) sia assegnata la propria blockchain - contiene tutti i messaggi che gli arrivano - e che gli stati di tutte queste blockchain siano archiviati su nodi separati.

Naturalmente, questo è molto dispendioso: molto probabilmente, in ognuno di questi shardchains (shardchain, blockchain di frammenti) le transazioni arriveranno molto raramente e saranno necessari molti nodi potenti (guardando al futuro, noto che non stiamo parlando solo di client su telefoni cellulari, ma di server seri).

Pertanto, le shardchain combinano gli account in base ai prefissi binari dei loro identificatori: se una shardchain ha un prefisso 0110, includerà le transazioni di tutti gli account_id che iniziano con questi numeri. Questo shard_prefix può avere una lunghezza da 0 a 60 bit e, soprattutto, può cambiare dinamicamente.

TON: Rete aperta di Telegram. Parte 2: Blockchain, sharding

Non appena una delle shardchain inizia a ricevere troppe transazioni, i nodi che lavorano su di essa, secondo regole predeterminate, la “dividono” in due figli: i loro prefissi saranno un po' più lunghi (e per uno di loro questo bit sarà uguale a 0, e per l'altro - 1). Per esempio, shard_prefix = 0110b si dividerà in 01100b e 01101b. A loro volta, se due shardchain “vicine” cominciano a sentirsi abbastanza a proprio agio (per qualche tempo), si fonderanno nuovamente.

Pertanto, lo sharding viene eseguito "dal basso verso l'alto": presumiamo che ogni account abbia il proprio frammento, ma per il momento sono "incollati insieme" da prefissi. Questo è ciò che significa Paradigma di Sharding Infinito (paradigma di sharding infinito).

Separatamente, vorrei sottolineare che le catene di lavoro esistono solo virtualmente – di fatto, workchain_id fa parte dell'identificatore di una specifica shardchain. In termini formali, ogni shardchain è definita da una coppia di numeri (workchain_id, shard_prefix).

Correzione dell'errore. Blockchain verticali.

Tradizionalmente, qualsiasi transazione su una blockchain è considerata “scolpita nella pietra”. Tuttavia, nel caso di TON, è possibile “riscrivere la storia” - nel caso in cui qualcuno (il cosiddetto. nodo del pescatore) dimostrerà che uno dei blocchi è stato firmato in modo errato. In questo caso, alla shardchain corrispondente viene aggiunto uno speciale blocco di correzione, contenente l'hash del blocco stesso da correggere (e non l'ultimo blocco della shardchain). Pensando alla shardchain come ad una catena di blocchi disposti orizzontalmente, possiamo dire che il blocco correttivo è attaccato al blocco errato non a destra, ma dall'alto - quindi si considera che diventi parte di una piccola “blockchain verticale” . Quindi, possiamo dire che le shardchain lo sono blockchain bidimensionali.

TON: Rete aperta di Telegram. Parte 2: Blockchain, sharding

Se, dopo un blocco errato, le modifiche apportate da esso sono state referenziate da blocchi successivi (cioè, sono state effettuate nuove transazioni sulla base di quelle non valide), a questi blocchi vengono aggiunti anche quelli correttivi “in alto”. Se i blocchi non hanno influenzato le informazioni “interessate”, queste “onde correttive” non si applicano ad esse. Ad esempio, nell'illustrazione sopra, la transazione del primo blocco, che aumenta il saldo del conto C, è stata riconosciuta come errata, pertanto anche la transazione che diminuisce il saldo di questo conto nel terzo blocco dovrebbe essere annullata e un blocco correttivo dovrebbe essere impegnato sopra il blocco stesso.

Da notare che nonostante i blocchi correttivi siano raffigurati come posizionati “sopra” quelli originali, in realtà verranno aggiunti alla fine della blockchain corrispondente (dove dovrebbero trovarsi in ordine cronologico). La posizione bidimensionale mostra solo a quale punto della blockchain saranno “collegati” (tramite l’hash del blocco originale situato in essi).

Puoi filosofare separatamente su quanto sia buona la decisione di "cambiare il passato". Sembrerebbe che se ammettiamo la possibilità che appaia un blocco errato nella shardchain, allora non possiamo evitare la possibilità che appaia un blocco correttivo errato. Qui, per quanto ne so, la differenza sta nel numero di nodi che devono raggiungere il consenso sui nuovi blocchi: ci sarà un numero relativamente piccolo di persone che lavoreranno su ciascuna shardchain."gruppo di lavoro» nodi (che cambia la sua composizione abbastanza spesso), e l'introduzione di blocchi correttivi richiederà il consenso di tutti nodi validatori. Parlerò più approfonditamente di validatori, gruppi di lavoro e altri ruoli dei nodi nel prossimo articolo.

Una blockchain per domarli tutti

Ci sono molte informazioni elencate sopra sui diversi tipi di blockchain, che a loro volta dovrebbero essere archiviate da qualche parte. In particolare si tratta delle seguenti informazioni:

  • sul numero e sulle configurazioni delle catene di lavoro;
  • sul numero di shardchain e sui loro prefissi;
  • su quali nodi sono attualmente responsabili di quali shardchain;
  • hash degli ultimi blocchi aggiunti a tutte le shardchain.

Come avrai intuito, tutte queste cose sono registrate in un altro archivio blockchain - catena principale (catena principale, blockchain principale). A causa della presenza di hash dai blocchi di tutte le shardchain nei suoi blocchi, rende il sistema altamente connesso. Ciò significa, tra le altre cose, che la generazione di un nuovo blocco nella masterchain avverrà immediatamente dopo la generazione dei blocchi nelle shardchain: si prevede che i blocchi nelle shardchain appaiano quasi simultaneamente ogni 5 secondi circa, e il blocco successivo nella masterchain - un secondo dopo.

Ma chi sarà responsabile dell’implementazione di tutto questo lavoro titanico – per l’invio di messaggi, l’esecuzione di contratti intelligenti, la formazione di blocchi nelle shardchain e nella masterchain e persino il controllo degli errori nei blocchi? Tutto questo verrà fatto segretamente dai telefoni di milioni di utenti su cui è installato il client Telegram? O forse il team Durov abbandonerà l’idea di decentralizzazione e i suoi server lo faranno alla vecchia maniera?

In realtà né l’una né l’altra risposta sono corrette. Ma i margini di questo articolo si stanno rapidamente esaurendo, quindi parleremo dei vari ruoli dei nodi (potresti aver già notato menzioni di alcuni di essi), nonché dei meccanismi del loro lavoro, nella parte successiva.

Fonte: habr.com

Aggiungi un commento