Blokkláncadat-tárolási stratégiák
Utolsó módosítás: @Satglow(opens in a new tab), 2024. június 18.
Többféle módon lehet információt tárolni vagy közvetlenül a blokkláncon, vagy olyan módon, hogy azt a blokklánc biztosítja:
- EIP-4844 blobok
- Calldata
- Láncon kívül L1 mechanizmusokkal
- Szerződés „kódja”
- Események
- EVM-tárhely
A módszer kiválasztása számos feltételtől függ:
- Az információ forrása. A calldata mezőben lévő információ nem származhat közvetlenül a blokkláncról.
- Az információ célállomása. A calldata csak az általa kezdeményezett tranzakcióban érhető el. Az események egyáltalán nem érhetők el a láncon.
- Mekkora erőfeszítés elfogadható? A teljes csomópontot futtató számítógépek többet dolgoznak, mint egy könnyű kliens egy alkalmazásban, mely böngészőben fut.
- Szükséges, hogy minden csomópont könnyedén elérje az információt?
- Biztonsági követelmények.
Biztonsági követelmények
Általánosságban az információs biztonság három jellemzővel bír:
Titkosság, vagyis a felhatalmazással nem rendelkező entitások nem olvashatják el az információt. Ez sok helyen fontos, de itt nem. A blokkláncon nincsenek titkok. A blokklánc működésének alapja, hogy bárki ellenőrzini tudja a státuszváltozásokat, ezért közvetlen módon nem használható titkok tárolására. Vannak módok, hogy bizalmas információkat tároljanak blokkláncon, de ezek valami láncon kívüli elemen alapulnak, hogy legalább egy kulcsot ott tároljanak.
Integritás, vagyis az információ korrekt, azt nem változtathatják meg olyanok, akik arra nincsenek felhatalmazva, vagy nem engedélyezett módokon (például ERC-20 tokenek(opens in a new tab) küldése a „Transfer” esemény nélkül). A blokkláncon minden csomópont ellenőriz minden státuszváltozást, mely biztosítja az integritást.
Elérhetőség, vagyis az információ elérhető minden arra felhatalmazott entitásnak. A blokkláncon ezt úgy érik el, hogy az információ minden teljes csomóponton(opens in a new tab) elérhető.
Ezek a megoldások mind kiváló integritással bírnak, mert a hash-eket az L1-en rögzítik. De más elérhetőségi biztosítékaik vannak.
Előfeltételek
A jelen téma könnyebb megértéséhez érdemes ismerni a blokklánc alapjait. Ez az oldal azt is feltételezi, hogy az olvasó ismeri a blokkokat, tranzakciókat és más kapcsolódó témákat.
EIP-4844 blobok
A Dencun végleges elágazás(opens in a new tab) óta az Ethereum blokklánc tartalmazza az EIP-4844(opens in a new tab) változást, ami az Ethereumhoz adatblobokat illesztett, melyek rövid ideig, kb. 18 napig(opens in a new tab) elérhetőek. Ezeket a blobokat külön árazzák, a végrehajtási gáztól függetlenül, bár hasonló mechanizmussal. Ez egy olcsó megoldás átmeneti adatok tárolására.
Az EIP-4844 blobok fő használati területe az összevont tranzakciók, hogy az általuk feldolgozott tranzakciók bekerüljenek az L1-re. Az optimista rollupoknak publikálni kell a tranzakciókat a blokkláncon. Ezeknek a tranzakcióknak elérhetőnek kell lenniük bárki számára a megkérdőjelezési periódusban(opens in a new tab), hogy a validátorok(opens in a new tab) kijavíthassák a hibát, ha a rollup szekvencer(opens in a new tab) rossz státuszgyökeret posztol.
Ugyanakkor a megkérdőjelezési periódus után a státuszgyökér véglegessé válik, a tranzakciók további lényege az marad, hogy a lánc jelen státuszát újra lehessen alkotni. Ez a státusz elérhető a lánc csomópontjaiból is, melyhez kevesebb erőfeszítés szükséges. Így a tranzakciókról szóló információ megmarad néhány helyen, mint amilyenek a blokkfelfedezők, de nincs szükség arra a cenzúrának való ellenállásra, amit az Ethereum biztosít.
A zero-knowledge rollupok is posztolják a tranzakciós adatokat, hogy más csomópontok replikálni tudják a státuszt és ellenőrizhessék az érvényességi bizonyítékokat, de ez is egy rövid távú igény.
A jelen írás idején az EIP-4844-gyel a költség egy wei (10-18 ETH) bájtonként, ami elhanyagolható a 21,000 végrehajtási gázhoz képest, amibe bármelyik tranzakció kerül, beleértve azt, ami blobokat is posztol(opens in a new tab). Az EIP-4844 árakat a következő oldalon tekintheti meg: blobscan.com(opens in a new tab).
A következőben láthatók azok a címek, melyekre néhány ismert rollup posztolja a blobokat.
Calldata
A calldata azokat a bájtokat jelenti, melyeket a tranzakció részeként küldenek. Ez a blokklánc állandó tárhelyének része a blokkban, amely az adott tranzakciót tartalmazza.
Így lehet a legolcsóbban adatot tenni a blokkba állandó tárolásra. A bájtonkénti költsége 4 végrehajtási gáz (ha a bájt nulla) vagy 16 gáz (minden más értéknél). Ha az adat tömörítve van, ami egy bevett gyakorlat, akkor minden bájtérték ugyanolyan valószínű, így az átlagköltség kb. 15,95 gáz bájtonként.
A jelen írás idején az ár 12 gwei/gáz és 2300 $/ETH, mely szerint a költség kb. 45 cent kilóbájtonként. Mivel az EIP-4844 előtt ez volt a legolcsóbb módszer, ezért a rollupok így tárolták a tranzakciós információkat, hogy azok elérhetők legyenek a hiba kivizsgálásra(opens in a new tab), de nem kell azokat közvetlenül elérni a láncon.
A következőben láthatóak azok a címek, melyekre néhány ismert rollup posztolja a tranzakciókat.
Láncon kívül L1 mechanizmusokkal
A biztonsági megfontolások alapján talán elfogadható, hogy az információ máshol található, és egy mechanizmus biztosítja az elérhetőségét. Ez két feltétellel működhet:
Az adat hashét(opens in a new tab) a blokkláncra kell posztolni, melyet input rögzítésnek neveznek. Ez lehet egy 32 bájtos szó, ami nem kerül sokba. Amíg az input rögzítése elérhető, az integritás biztosítva van, mert nem lesz más adat, aminek a hashe ugyanarra mutatna. Ha a helyes adat elérhető, akkor azt meg lehet találni.
Szükség van egy mechanizmusra, mellyel elérhetővé válik az adat. Például a Redstone(opens in a new tab) esetében bármelyik csomópont indíthat elérhetőségi kihívást. Ha a szekvencer nem válaszol online a határidőig, az inputrögzítést elvetik, így az információt úgy veszik, mintha sosem lett volna beposztolva.
Ez elfogadható az optimista rollup esetén, mert arra támaszkodunk, hogy legalább egy jóhiszemű ellenőrző van a státuszgyökérre. Egy ilyen jóhiszemű ellenőrző azt is biztosítja, hogy az adat létezik a blokk feldolgozásához, és egy elérhetőségi kihívást ad ki, ha az információ nem elérhető a láncon kívül. Ezt a fajta optimista rollupot nevezik plazmának.
Szerződéskód
Az információ, melyet csak egyszer kell rögzíteni, sosem lesz felülírva, és a láncon belül elérhetőnek kell lennie, szerződéskódként is tárolható. Tehát készítünk egy „okosszerződést” az adattal, majd a EXTCODECOPY(opens in a new tab) paranccsal kiolvassuk az információt. Ennek előnye az, hogy a kód másolása viszonylag olcsó.
A memória kibővítésének költségén kívül az EXTCODECOPY 2600 gázba kerül, amikor a szerződéshez először férnek hozzá (amikor az „hideg”) és 100 gázba kerülnek a további másolatok, plusz 3 gázba 32 bájtnyi szavanként. A calldata-hoz képes, ami 15,95-be kerül bájtonként, ez kevesebb kb. 200 bájttól kezdve. A memória kibővéítés költségének képlete(opens in a new tab) alapján, amíg nincs szükség több mint 4 MB memóriára, ez a bővítési költség kisebb, mint a calldata hozzáadása.
Természetesen ez csak az adat kiolvasása. A szerződés létrehozásánek költsége kb. 32 000 gáz + 200 gáz/bájt. Ez csak akkor éri meg, ha az adott információt többször kell kiolvasni különféle tranzakciók során.
A szerződéskód lehet értelmetlen, amíg nem kezdődik 0xEF-fel. Ha a szerződés kezdete 0xEF, akkor az egy ethereum objektum formátum(opens in a new tab), amelynek szigorúbb követelményeknek kell megfelelnie.
Események
Az eseményeket(opens in a new tab) az okosszerződések adják ki, és a láncon kívüli szoftverek olvassák azokat. Előnye az, hogy a láncon kívüli kód képes értelmezni az eseményeket. A költsége 375 gáz(opens in a new tab) plusz 8 gáz bájtonként. Ha 12 gwei/gáz és 2300 $/ETH, akkor ez 1 cent plusz 22 cent kilóbájtonként.
Tárhely
Az okosszerződések hozzáférnek az állandó tárhelyhez(opens in a new tab). Ez azonban nagyon drága. Egy 32 bájtos szó beírása egy üres helyre belekerülhet akár 22 100 gázba is(opens in a new tab). Ha 12 gwei/gáz és 2300 $/ETH, akkor ez 61 cent minden írásra, vagy 19,5 $ kilóbájtonként.
Ez a legdrágább tárolás az Ethereumon.
Összefoglaló
Ez a táblázat összefoglalja a különböző opciókat azok előnyeivel és hátrányaival együtt.
Tárolási típus | Adatforrás | Elérhetőségi garancia | Láncon belüli elérhetőség | További korlátozások |
---|---|---|---|---|
EIP-4844 blobok | Láncon kívüli | Az Ethereum garantálja kb. 18 napig(opens in a new tab) | Csak a hash elérhető | |
Calldata | Láncon kívüli | Az Ethereum garantálja örökre (része a blokkláncnak) | Csak akkor elérhető, ha egy szerződésbe van írva, és abban az adott tranzakcióban | |
Láncon kívül L1 mechanizmusokkal | Láncon kívüli | Legalább egy jóhiszemű ellenőrző garantálja a kihívási periódus alatt | Csak hash | A kihívási mechanizmus garantálja a kihívási időszak alatt |
Szerződéskód | Láncon belüli vagy kívüli | Az Ethereum garantálja örökre (része a blokkláncnak) | Igen | Egy „véletlenszerű” címre van írva, nem kezdődhet 0xEF-fel |
Események | Láncon belüli | Az Ethereum garantálja örökre (része a blokkláncnak) | Nem | |
Tárhely | Láncon belüli | Az Ethereum garantálja örökre (része a blokkláncnak és a jelen státusznak addig, amíg felül nem írják) | Igen |