Spiegazione di QuarkChain, parte 3: frammentazione in QuarkChain - Partizionamento di stato

(Per capire più contesto dello sharding, controlla la Parte 2: Sharding - Breve introduzione e sfide nella Blockchain)

Panoramica del design di QuarkChain Sharding

Dato il modello blockchain esistente, QuarkChain migliora i modelli esistenti con i seguenti design:

  • (Stato da partizionare): QuarkChain esegue la partizione di contratti intelligenti, ovvero inserendo contratti intelligenti in frammenti diversi se si verifica un evento di reshard. Un contratto intelligente contiene codice e archiviazione e la dimensione dei dati potrebbe essere molto più grande di un account utente (si consideri un ERC20 con un numero elevato di mappature da indirizzo a saldo).
  • (Stato su partizione): non partizioniamo gli account utente e un utente può facilmente spostare lo stato del proprio account (principalmente bilanciare) su un altro frammento tramite transazioni cross-shard. Ciò consente a un utente con una chiave privata di accedere a tutte le risorse (contratti intelligenti) in tutti i frammenti.
  • (Atomicità): ogni contratto intelligente ha una chiave shard (fullShardId nel nostro codebase) e tutte le operazioni batch su tutti i contratti intelligenti con la stessa chiave shard sono atomiche. Inoltre, è vietato un contratto intelligente che tenta di accedere a un altro contratto intelligente con chiave di frammento diversa.
  • (Carico / dimensioni bilanciate): supponendo che le chiavi di frammenti di contratti intelligenti siano distribuite uniformemente, si prevede che i contratti intelligenti vengano suddivisi uniformemente in frammenti diversi.
  • (Reshard): per aggiungere più frammenti con un basso costo di migrazione, abbiamo diviso un frammento in due frammenti in base alla chiave del frammento nei contratti intelligenti. Ciò elimina le migrazioni di dati da altri frammenti di pre-reshard e semplifica quindi la reshard.
  • (Reshard): i comportamenti dei contratti intelligenti saranno gli stessi prima e dopo il reshard, ovvero la lettura di un contratto intelligente ha lo stesso valore e la scrittura di un contratto intelligente nello stesso sistema cambia prima e dopo- reshard.

Stato del sistema e partizione di stato di QuarkChain

Per supportare l'atomicità di un batch di operazioni CRUD in QuarkChain, QuarkChain ridefinisce l'indirizzo di un account utente e un contratto intelligente aggiungendo una chiave di shard a 32 bit a ciascun indirizzo:

Indirizzo: = RIPEMD160 (chiave pubblica) + chiave Shard,

dove + è l'operatore del prodotto cartesiano, un indirizzo di QuarkChain è un dato di 192 bit e ci riferiamo al primo 160 bit dell'indirizzo come destinatario dell'indirizzo in QuarkChain.

Il numero di frammenti (dimensione del frammento) in una rete QuarkChain è una potenza di 2 e un'operazione di reshard raddoppierà il numero di frammenti nella rete. Data una dimensione del frammento, i frammenti sono indicizzati da:

ID Shard: = chiave Shard% dimensione Shard.

Lo stato in un frammento è una mappatura del valore-chiave, in cui la chiave è il destinatario degli indirizzi e il valore contiene

  • Equilibrio;
  • nonce;
  • Codice;
  • Conservazione;
  • ShardKey.

dove ShardKey è impostato quando viene creata la coppia chiave-valore e successivamente è immutabile.

Con una chiave di frammento aggiuntiva nell'indirizzo, un utente (o un destinatario) è in grado di gestire tutti gli indirizzi in tutti i frammenti con un'unica chiave privata.

Transazioni in QuarkChain

Transazioni di trasferimento del saldo

Una transazione di trasferimento del saldo dipende dagli indirizzi di origine e di destinazione:

  • (Transazione nel frammento): se entrambi gli indirizzi hanno lo stesso ID frammento (anche le chiavi del frammento sono diverse), il trasferimento è una transazione nel frammento e tale transazione aggiornerà solo il saldo dei destinatari nello stesso frammento.
  • (Transazione cross-shard): se entrambi gli indirizzi hanno i diversi ID shard, il trasferimento è una transazione cross-shard e l'atomicità della transazione richiede un ulteriore coordinamento. Fortunatamente, tale transazione è molto più semplice della tradizionale transazione cross-chain poiché entrambi i frammenti eseguono la stessa criptovaluta (QKC). I dettagli della transazione cross-shard saranno discussi in un altro articolo.

Transazioni smart contract

Una transazione di contratto intelligente deve essere emessa nello stesso frammento, ovvero l'id del frammento dell'account utente di origine e il contratto intelligente di destinazione deve essere lo stesso. Un contratto intelligente può chiamare un altro contratto intelligente (fornendo il destinatario di un altro contratto intelligente, ovvero l'indirizzo in EVM, nel codice per mantenere la compatibilità con le versioni precedenti di EVM) con la stessa chiave shard. Tuttavia, tale chiamata del contratto fallirà se i contratti intelligenti sono con chiave di frammento diversa, dove tale chiamata equivale a chiamare un contratto intelligente con il seguente codice assembly:

PUSH 0x0
DUP1
REVERT

Poiché i contratti intelligenti con la stessa chiave di partizione saranno sempre partizionati sullo stesso frammento, i comportamenti del contratto intelligente (lettura / scrittura) sono garantiti gli stessi, indipendentemente dalla modalità di partizione dello stato del sistema (vedere la sezione Reshard in QuarkChain per più dettagli).

Reshard in QuarkChain

Un'operazione reshard dividerà ogni frammento in due frammenti separati e, di conseguenza, la dimensione del frammento verrà raddoppiata. Dopo aver raddoppiato la dimensione del frammento, la destinazione dell'account utente / dei contratti intelligenti viene identificata dal bit extra significativo nel nuovo ID frammento. Supponendo che le chiavi di frammenti di account utente / contratti intelligenti siano distribuite in modo uniforme, metà degli account utente / contratti intelligenti dovrebbe essere suddivisa in un nuovo frammento e il resto in un altro frammento. Inoltre, un frammento diviso può ancora contenere i contratti intelligenti di un altro frammento diviso sostituendo il codice con il codice REVERT e annullando la sua memorizzazione. Questi contratti intelligenti fittizi assicurano che i contratti intelligenti nel nuovo frammento non riescano ancora a chiamare i contratti intelligenti che erano nello stesso frammento ma con chiavi di frammenti diverse.

Se il nodo corrente che elabora entrambi i frammenti divisi è fuori capacità, è possibile aggiungere un nuovo nodo nella rete per elaborare un nuovo frammento migrando il suo stato, e quindi la capacità del sistema potrebbe essere aumentata all'aumentare del numero di frammenti / nodi. Ciò è ottenuto da un cluster, che sarà discusso in articoli futuri.

Selezione chiave Shard in QuarkChain

Una chiave per il bilanciamento del carico in QuarkChain è garantire che tutti i contratti intelligenti siano distribuiti su tutti i frammenti. Poiché la chiave di shard è immutabile dopo la creazione di un contratto intelligente, la selezione della chiave durante la creazione è importante.

Innanzitutto, se un contratto intelligente da creare dipende da altri contratti intelligenti, la chiave di shard deve essere la stessa dei contratti intelligenti dipendenti.

In secondo luogo, se un contratto intelligente non dipende da altri contratti intelligenti, un utente (o un portafoglio) è libero di scegliere qualsiasi chiave di shard o il sistema potrebbe imporre alcune regole:

  • Chiave di shard generata casualmente; o
  • Qualsiasi destinatario a 32 bit nell'indirizzo di origine; o
  • Indirizzo IP del portafoglio.

Le prime due selezioni potrebbero comportare la distribuzione uniforme dei tasti shard. Tuttavia, supponiamo che ci siano centinaia o migliaia di frammenti. Un utente che desidera accedere a qualsiasi contratto intelligente nella rete potrebbe aver bisogno di frequenti transazioni cross-shard o di mantenere saldi multipli, il che riduce l'efficienza della condivisione o peggiora l'esperienza dell'utente.

L'uso dell'indirizzo IP può alleviare il problema raggruppando i contratti intelligenti con informazioni geografiche. Se l'interazione dell'utente con il contratto intelligente è geograficamente correlata (ad esempio, interagisce con prodotti / servizi locali), un utente potrebbe semplicemente mantenere i suoi saldi nei frammenti correlati alle posizioni in cui l'utente risiede o si reca, salvando potenzialmente un molte inutili transazioni cross-shard e semplificando la gestione dell'account utente.

Confronto tra QuarkChain e la BigTable di Google

Molti dei progetti di sharding di QuarkChain sono ispirati alla BigTable di Google e condividono molte somiglianze in quanto entrambi sono essenzialmente un negozio di valore-chiave. La tabella seguente li confronta fianco a fianco.

Oltre alle somiglianze, QuarkChain presenta anche alcune importanti differenze con BigTable:

  • QuarkChain supporta in modo nativo le transazioni cross-shard, che trasferiscono il saldo da un account in un shard a un altro account in un altro shard, mentre BigTable non supporta transazioni su più righe.
  • BigTable consente di unire due tablet adiacenti (frammenti) in un tablet se le due tabelle sono piccole a causa delle eliminazioni. Al contrario, le operazioni di eliminazione (ad es. Autodistruzione) vengono utilizzate raramente nella blockchain, quindi non è necessaria l'operazione di fusione. Ciò semplifica notevolmente il modello di sistema e il modello di minaccia di QuarkChain (come l'attacco di tipo replay).

Sommario

Ispirato ai sistemi scalabili esistenti, abbiamo proposto un nuovo modello di sistema blockchain e descritto il nostro schema di sharding. Inoltre, abbiamo presentato un confronto tra il nostro modello proposto e la BigTable di Google. Nel prossimo articolo Parte 4: frammentazione di QuarkChain: consenso, discuteremo di come costruire un consenso per supportare lo sharding e il corrispondente modello di minaccia di QuarkChain.

Informazioni su QuarkChain

QuarkChain mira a risolvere il problema della scalabilità della blockchain utilizzando tecnologie di scalabilità orizzontale. La missione di QuarkChain è consentire a tutti nel mondo di utilizzare le tecnologie blockchain sempre e ovunque. Se sei interessato a QuarkChain, controlla i seguenti collegamenti per ulteriori informazioni:

Sito Web https://www.quarkchain.io

Telegram https://t.me/quarkchainio

Twitter https://twitter.com/Quark_Chain

Steemit https://steemit.com/@quarkchain

Medium https://medium.com/quarkchain-official

Reddit https://www.reddit.com/r/quarkchainio/

Weibo https://weibo.com/QuarkChain