Přejít na hlavní obsah
Change page

Strategie ukládání dat na blockchainu

Existuje několik způsobů, jak ukládat informace buď přímo na blockchainu, nebo způsobem, který je blockchainem zabezpečen:

  • Bloby EIP-4844
  • Data volání
  • Offchain s mechanismy vrstvy 1 (L1)
  • „Kód“ kontraktu
  • Události
  • Úložiště EVM

Výběr metody závisí na několika kritériích:

  • Zdroj informací. Informace v datech volání nemohou pocházet přímo ze samotného blockchainu.
  • Cíl informací. Data volání jsou k dispozici pouze v transakci, která je obsahuje. Události nejsou onchain vůbec přístupné.
  • Kolik komplikací je přijatelných? Počítače, které provozují plný uzel, mohou provádět více zpracování než lehký klient v aplikaci běžící v prohlížeči.
  • Je nutné usnadnit snadný přístup k informacím z každého uzlu?
  • Bezpečnostní požadavky.

Bezpečnostní požadavky

Obecně se informační bezpečnost skládá ze tří atributů:

  • Důvěrnost, neoprávněné subjekty nesmí číst informace. To je v mnoha případech důležité, ale ne zde. Na blockchainu nejsou žádná tajemství. Blockchainy fungují, protože kdokoli může ověřit přechody stavu, takže je nemožné je použít k přímému ukládání tajemství. Existují způsoby, jak ukládat důvěrné informace na blockchainu, ale všechny spoléhají na nějakou offchain komponentu, která ukládá alespoň klíč.

  • Integrita, informace jsou správné, nemohou být změněny neoprávněnými subjekty nebo neoprávněnými způsoby (například převod tokenů ERC-20 (opens in a new tab) bez události Transfer). Na blockchainu každý uzel ověřuje každou změnu stavu, což zajišťuje integritu.

  • Dostupnost, informace jsou k dispozici jakémukoli oprávněnému subjektu. Na blockchainu se toho obvykle dosahuje tím, že jsou informace dostupné na každém plném uzlu (opens in a new tab).

Všechna zde uvedená řešení mají vynikající integritu, protože hashe jsou zveřejňovány na vrstvě 1 (L1). Mají však různé záruky dostupnosti.

Předpoklady

Měli byste dobře rozumět základům blockchainu. Tato stránka také předpokládá, že čtenář je obeznámen s bloky, transakcemi a dalšími souvisejícími tématy.

Bloby EIP-4844

Počínaje hard forkem Dencun (opens in a new tab) obsahuje blockchain Etherea EIP-4844 (opens in a new tab), který do Etherea přidává datové bloby s omezenou životností (zpočátku asi 18 dní (opens in a new tab)). Tyto bloby jsou zpoplatněny odděleně od gasu za provedení, ačkoli využívají podobný mechanismus. Představují levný způsob, jak zveřejňovat dočasná data.

Hlavním případem užití blobů EIP-4844 je pro rollupy, aby mohly publikovat své transakce. Optimistické rollupy potřebují publikovat transakce na svých blockchainech. Tyto transakce musí být komukoli dostupné během období pro zpochybnění (opens in a new tab), aby validátoři (opens in a new tab) mohli opravit chybu, pokud sekvencer (opens in a new tab) rollupu zveřejní nesprávný kořen stavu.

Jakmile však období pro zpochybnění uplyne a kořen stavu je finalizováno, zbývajícím účelem znalosti těchto transakcí je replikace aktuálního stavu řetězce. Tento stav je také dostupný z uzlů řetězce, což vyžaduje mnohem méně zpracování. Informace o transakcích by tedy měly být stále zachovány na několika místech, jako jsou prohlížeče bloků, ale není nutné platit za úroveň odolnosti vůči cenzuře, kterou Ethereum poskytuje.

Rollupy s nulovým vědomím také zveřejňují svá transakční data, aby umožnily ostatním uzlům replikovat existující stav a ověřit důkazy platnosti, ale i to je pouze krátkodobý požadavek.

V době psaní tohoto textu stojí zveřejnění na EIP-4844 jeden Wei (10-18 ETH) za bajt, což je zanedbatelné ve srovnání s 21 000 gasu za provedení, které stojí jakákoli transakce, včetně té, která zveřejňuje bloby (opens in a new tab). Aktuální cenu EIP-4844 můžete vidět na blobscan.com (opens in a new tab).

Zde jsou adresy, kde si můžete prohlédnout bloby zveřejněné některými známými rollupy.

Data volání

Data volání označují bajty odeslané jako součást transakce. Jsou uložena jako součást trvalého záznamu blockchainu v bloku, který tuto transakci obsahuje.

Jedná se o nejlevnější metodu, jak trvale vložit data do blockchainu. Cena za bajt je buď 4 gasy za provedení (pokud je bajt nula), nebo 16 gasů (jakákoli jiná hodnota). Pokud jsou data komprimována, což je standardní praxe, pak je každá hodnota bajtu stejně pravděpodobná, takže průměrná cena je přibližně 15,95 gasu za bajt.

V době psaní tohoto textu jsou ceny 12 Gwei/gas a 2300 $/ETH, což znamená, že cena je přibližně 45 centů za kilobajt. Protože to byla před EIP-4844 nejlevnější metoda, je to metoda, kterou rollupy používaly k ukládání informací o transakcích, které musí být dostupné pro zpochybnění chyb (opens in a new tab), ale nemusí být přístupné přímo onchain.

Zde jsou adresy, kde si můžete prohlédnout transakce zveřejněné některými známými rollupy.

Offchain s mechanismy L1

V závislosti na vašich bezpečnostních kompromisech může být přijatelné umístit informace jinam a použít mechanismus, který zajistí, že data budou k dispozici, když budou potřeba. Aby to fungovalo, existují dva požadavky:

  1. Zveřejnit hash (opens in a new tab) dat na blockchainu, nazývaný vstupní závazek. Může to být jediné 32bajtové slovo, takže to není drahé. Dokud je vstupní závazek k dispozici, je zajištěna integrita, protože není proveditelné najít žádná jiná data, která by měla stejný hash. Pokud jsou tedy poskytnuta nesprávná data, lze to odhalit.

  2. Mít mechanismus, který zajišťuje dostupnost. Například v Redstone (opens in a new tab) může jakýkoli uzel podat výzvu k dostupnosti. Pokud sekvencer neodpoví onchain do stanoveného termínu, vstupní závazek je zahozen, takže se informace považuje za nikdy nezveřejněnou.

To je přijatelné pro optimistický rollup, protože již spoléháme na to, že máme alespoň jednoho poctivého ověřovatele pro kořen stavu. Takový poctivý ověřovatel se také ujistí, že má data ke zpracování bloků, a vydá výzvu k dostupnosti, pokud informace nejsou dostupné offchain. Tento typ optimistického rollupu se nazývá Plasma.

Kód kontraktu

Informace, které je třeba zapsat pouze jednou, nikdy se nepřepisují a musí být dostupné onchain, lze uložit jako kód kontraktu. To znamená, že vytvoříme „chytrý kontrakt“ s daty a poté použijeme EXTCODECOPY (opens in a new tab) ke čtení informací. Výhodou je, že kopírování kódu je relativně levné.

Kromě nákladů na rozšíření paměti stojí EXTCODECOPY 2600 gasu za první přístup ke kontraktu (když je „studený“) a 100 gasu za následné kopie ze stejného kontraktu plus 3 gasy za 32bajtové slovo. Ve srovnání s daty volání, která stojí 15,95 za bajt, je to levnější od přibližně 200 bajtů. Na základě vzorce pro náklady na rozšíření paměti (opens in a new tab), pokud nepotřebujete více než 4 MB paměti, jsou náklady na rozšíření paměti menší než náklady na přidání dat volání.

Samozřejmě, to jsou pouze náklady na čtení dat. Vytvoření kontraktu stojí přibližně 32 000 gasu + 200 gasu/bajt. Tato metoda je ekonomická pouze tehdy, když je třeba stejné informace číst mnohokrát v různých transakcích.

Kód kontraktu může být nesmyslný, pokud nezačíná na 0xEF. Kontrakty, které začínají na 0xEF, jsou interpretovány jako objektový formát Etherea (EOF) (opens in a new tab), který má mnohem přísnější požadavky.

Události

Události (opens in a new tab) jsou emitovány chytrými kontrakty a čteny offchain softwarem. Jejich výhodou je, že offchain kód může naslouchat událostem. Nákladem je gas (opens in a new tab), 375 plus 8 gasů za bajt dat. Při 12 Gwei/gas a 2300 $/ETH to znamená jeden cent plus 22 centů za kilobajt.

Úložiště

Chytré kontrakty mají přístup k trvalému úložišti (opens in a new tab). Je to však velmi drahé. Zápis 32bajtového slova do dříve prázdného slotu úložiště může stát 22 100 gasu (opens in a new tab). Při 12 Gwei/gas a 2300 $/ETH je to asi 61 centů za operaci zápisu, neboli 19,5 $ za kilobajt.

Jedná se o nejdražší formu úložiště v Ethereu.

Shrnutí

Tato tabulka shrnuje různé možnosti, jejich výhody a nevýhody.

Typ úložištěZdroj datZáruka dostupnostiOnchain dostupnostDalší omezení
Bloby EIP-4844OffchainZáruka Etherea na ~18 dní (opens in a new tab)K dispozici je pouze hash
Data voláníOffchainZáruka Etherea navždy (součást blockchainu)K dispozici pouze v případě zápisu do kontraktu a při dané transakci
Offchain s mechanismy L1OffchainZáruka „jednoho poctivého ověřovatele“ během období pro zpochybněníPouze hashZaručeno mechanismem zpochybnění, pouze během období pro zpochybnění
Kód kontraktuOnchain nebo offchainZáruka Etherea navždy (součást blockchainu)AnoZapsáno na „náhodnou“ adresu, nemůže začínat na 0xEF
UdálostiOnchainZáruka Etherea navždy (součást blockchainu)Ne
ÚložištěOnchainZáruka Etherea navždy (součást blockchainu a současného stavu, dokud není přepsáno)Ano