Strategie di archiviazione dei dati della blockchain
Esistono diversi modi per archiviare le informazioni direttamente sulla blockchain o in un modo che sia protetto dalla blockchain:
- Blob EIP-4844
- Dati di chiamata (calldata)
- Offchain con meccanismi di layer 1 (L1)
- "Codice" del contratto
- Eventi
- Archiviazione dell'EVM
La scelta del metodo da utilizzare si basa su diversi criteri:
- La fonte delle informazioni. Le informazioni nei dati di chiamata non possono provenire direttamente dalla blockchain stessa.
- La destinazione delle informazioni. I dati di chiamata sono disponibili solo nella transazione che li include. Gli eventi non sono affatto accessibili onchain.
- Quanto sforzo è accettabile? I computer che eseguono un nodo completo possono eseguire più elaborazioni rispetto a un client leggero in un'applicazione in esecuzione in un browser.
- È necessario facilitare un facile accesso alle informazioni da ogni nodo?
- I requisiti di sicurezza.
I requisiti di sicurezza
In generale, la sicurezza delle informazioni è costituita da tre attributi:
-
Riservatezza, alle entità non autorizzate non è consentito leggere le informazioni. Questo è importante in molti casi, ma non qui. Non ci sono segreti sulla blockchain. Le blockchain funzionano perché chiunque può verificare le transizioni di stato, quindi è impossibile utilizzarle per archiviare segreti direttamente. Esistono modi per archiviare informazioni riservate sulla blockchain, ma si basano tutti su qualche componente offchain per archiviare almeno una chiave.
-
Integrità, le informazioni sono corrette, non possono essere modificate da entità non autorizzate o in modi non autorizzati (ad esempio, trasferendo token ERC-20 (opens in a new tab) senza un evento
Transfer). Sulla blockchain, ogni nodo verifica ogni cambiamento di stato, il che garantisce l'integrità. -
Disponibilità, le informazioni sono disponibili per qualsiasi entità autorizzata. Sulla blockchain, questo si ottiene solitamente rendendo le informazioni disponibili su ogni nodo completo (opens in a new tab).
Le diverse soluzioni qui presentate hanno tutte un'eccellente integrità, perché gli hash vengono pubblicati sul layer 1 (L1). Tuttavia, hanno diverse garanzie di disponibilità.
Prerequisiti
Dovresti avere una buona comprensione dei fondamenti della blockchain. Questa pagina presuppone inoltre che il lettore abbia familiarità con i blocchi, le transazioni e altri argomenti pertinenti.
Blob EIP-4844
A partire dall'hard fork Dencun (opens in a new tab), la blockchain di Ethereum include l'EIP-4844 (opens in a new tab), che aggiunge a Ethereum blob di dati con una durata limitata (inizialmente circa 18 giorni (opens in a new tab)). Questi blob hanno un prezzo separato dal gas di esecuzione, sebbene utilizzino un meccanismo simile. Sono un modo economico per pubblicare dati temporanei.
Il caso d'uso principale per i blob EIP-4844 è per i rollup per pubblicare le loro transazioni. I rollup ottimistici devono pubblicare le transazioni sulle loro blockchain. Tali transazioni devono essere disponibili a chiunque durante il periodo di contestazione (opens in a new tab) per consentire ai validatori (opens in a new tab) di correggere l'errore se il sequencer (opens in a new tab) del rollup pubblica una radice di stato errata.
Tuttavia, una volta trascorso il periodo di contestazione e finalizzata la radice di stato, lo scopo rimanente per conoscere queste transazioni è replicare lo stato attuale della catena. Questo stato è disponibile anche dai nodi della catena, richiedendo molta meno elaborazione. Quindi le informazioni sulle transazioni dovrebbero comunque essere conservate in alcuni luoghi, come i block explorer, ma non c'è bisogno di pagare per il livello di resistenza alla censura che Ethereum fornisce.
Anche i rollup a conoscenza zero pubblicano i dati delle loro transazioni per consentire ad altri nodi di replicare lo stato esistente e verificare le prove di validità, ma ancora una volta si tratta di un requisito a breve termine.
Al momento della stesura, la pubblicazione su EIP-4844 costa un Wei (10-18 ETH) per byte, che è trascurabile rispetto ai 21.000 gas di esecuzione che costa qualsiasi transazione, inclusa una che pubblica blob (opens in a new tab). Puoi vedere il prezzo attuale dell'EIP-4844 su blobscan.com (opens in a new tab).
Ecco gli indirizzi per vedere i blob pubblicati da alcuni famosi rollup.
Dati di chiamata (calldata)
I dati di chiamata si riferiscono ai byte inviati come parte della transazione. Vengono archiviati come parte del registro permanente della blockchain nel blocco che include tale transazione.
Questo è il metodo più economico per inserire permanentemente i dati nella blockchain. Il costo per byte è di 4 gas di esecuzione (se il byte è zero) o 16 gas (qualsiasi altro valore). Se i dati sono compressi, il che è pratica standard, allora ogni valore di byte è ugualmente probabile, quindi il costo medio è di circa 15,95 gas per byte.
Al momento della stesura, i prezzi sono 12 Gwei/gas e 2300 $/ETH, il che significa che il costo è di circa 45 centesimi per kilobyte. Poiché questo era il metodo più economico prima dell'EIP-4844, questo è il metodo utilizzato dai rollup per archiviare le informazioni sulle transazioni, che devono essere disponibili per le contestazioni di errore (opens in a new tab), ma non devono essere accessibili direttamente onchain.
Ecco gli indirizzi per vedere le transazioni pubblicate da alcuni famosi rollup.
Offchain con meccanismi di L1
A seconda dei tuoi compromessi in materia di sicurezza, potrebbe essere accettabile inserire le informazioni altrove e utilizzare un meccanismo che garantisca che i dati siano disponibili quando necessario. Ci sono due requisiti affinché questo funzioni:
-
Pubblicare un hash (opens in a new tab) dei dati sulla blockchain, chiamato input commitment. Questa può essere una singola parola di 32 byte, quindi non è costosa. Finché l'input commitment è disponibile, l'integrità è assicurata perché non è fattibile trovare altri dati che produrrebbero lo stesso valore di hash. Quindi, se vengono forniti dati errati, possono essere rilevati.
-
Avere un meccanismo che garantisca la disponibilità. Ad esempio, in Redstone (opens in a new tab) qualsiasi nodo può inviare una contestazione di disponibilità. Se il sequencer non risponde onchain entro la scadenza, l'input commitment viene scartato, quindi le informazioni sono considerate come mai pubblicate.
Questo è accettabile per un rollup ottimistico perché facciamo già affidamento sull'avere almeno un verificatore onesto per la radice di stato. Tale verificatore onesto si assicurerà anche di avere i dati per elaborare i blocchi ed emetterà una contestazione di disponibilità se le informazioni non sono disponibili offchain. Questo tipo di rollup ottimistico è chiamato Plasma.
Codice del contratto
Le informazioni che devono essere scritte solo una volta, non vengono mai sovrascritte e devono essere disponibili onchain possono essere archiviate come codice del contratto. Ciò significa che creiamo uno "smart contract" con i dati e quindi utilizziamo EXTCODECOPY (opens in a new tab) per leggere le informazioni. Il vantaggio è che copiare il codice è relativamente economico.
Oltre al costo dell'espansione della memoria, EXTCODECOPY costa 2600 gas per il primo accesso a un contratto (quando è "freddo") e 100 gas per le copie successive dallo stesso contratto più 3 gas per parola di 32 byte. Rispetto ai dati di chiamata, che costano 15,95 per byte, questo è più economico a partire da circa 200 byte. In base alla formula per i costi di espansione della memoria (opens in a new tab), finché non hai bisogno di più di 4 MB di memoria, il costo di espansione della memoria è inferiore al costo dell'aggiunta di dati di chiamata.
Naturalmente, questo è solo il costo per leggere i dati. Creare il contratto costa circa 32.000 gas + 200 gas/byte. Questo metodo è economico solo quando le stesse informazioni devono essere lette molte volte in transazioni diverse.
Il codice del contratto può essere privo di senso, purché non inizi con 0xEF. I contratti che iniziano con 0xEF vengono interpretati come Ethereum Object Format (opens in a new tab), che ha requisiti molto più severi.
Eventi
Gli eventi (opens in a new tab) vengono emessi dagli smart contract e letti dal software offchain. Il loro vantaggio è che il codice offchain può rimanere in ascolto degli eventi. Il costo è in gas (opens in a new tab), 375 più 8 gas per byte di dati. A 12 Gwei/gas e 2300 $/ETH, questo si traduce in un centesimo più 22 centesimi per kilobyte.
Archiviazione
Gli smart contract hanno accesso all'archiviazione persistente (opens in a new tab). Tuttavia, è molto costosa. Scrivere una parola di 32 byte in uno slot di archiviazione precedentemente vuoto può costare 22.100 gas (opens in a new tab). A 12 Gwei/gas e 2300 $/ETH, si tratta di circa 61 centesimi per operazione di scrittura, o 19,5 $ per kilobyte.
Questa è la forma di archiviazione più costosa in Ethereum.
Riepilogo
Questa tabella riassume le diverse opzioni, i loro vantaggi e svantaggi.
| Tipo di archiviazione | Fonte dei dati | Garanzia di disponibilità | Disponibilità onchain | Limitazioni aggiuntive |
|---|---|---|---|---|
| Blob EIP-4844 | Offchain | Garanzia di Ethereum per ~18 giorni (opens in a new tab) | È disponibile solo l'hash | |
| Dati di chiamata | Offchain | Garanzia di Ethereum per sempre (parte della blockchain) | Disponibile solo se scritti in un contratto e in quella transazione | |
| Offchain con meccanismi di L1 | Offchain | Garanzia di "un verificatore onesto" durante il periodo di contestazione | Solo hash | Garantito dal meccanismo di contestazione, solo durante il periodo di contestazione |
| Codice del contratto | Onchain o offchain | Garanzia di Ethereum per sempre (parte della blockchain) | Sì | Scritto a un indirizzo "casuale", non può iniziare con 0xEF |
| Eventi | Onchain | Garanzia di Ethereum per sempre (parte della blockchain) | No | |
| Archiviazione | Onchain | Garanzia di Ethereum per sempre (parte della blockchain e dello stato attuale fino a sovrascrittura) | Sì |