Blokzincir Veri Depolama Stratejileri
Son düzenleme: @bicebaris(opens in a new tab), 18 Haziran 2024
Blokzincirde ya da blokzincir tarafından güvence altına alınan bir şekilde bilgi depolamanın birçok yolu vardır:
- EIP-4844 blob'ları
- Calldata
- L1 mekanizmalarıyla zincir dışında
- Sözleşme "kodu"
- Olaylar
- EVM depolaması
Hangi yöntemin kullanılacağı çeşitli ölçütlere bağlıdır:
- Bilginin kaynağı. Calldata'daki bilgi direkt olarak blokzincirin kendisinden gelemez.
- Bilginin varış noktası. Calldata yalnızca başlattığı işlemde kullanılabilir. Olaylar zincir üstünde hiçbir zaman erişilebilir değildir.
- Ne kadar zorluğa katlanılabilir? Tam ölçekli bir düğüm çalıştıran bilgisayarlar, tarayıcıda çalışan bir uygulamada hafif bir istemciden daha fazla işlem gerçekleştirebilir.
- Bilgiye her düğümden kolayca ulaşılabilmesi gerekli midir?
- Güvenlik gereklilikleri.
Güvenlik gereklilikleri
Bilgi güvenliği genel olarak üç özellikten oluşur:
Gizlilik, yetkisi olmayan kişilerin bilgileri okumasına izin verilmez. Bu çoğu durumda önemlidir, ama burada değil. Blokzincirde sır yoktur. Blokzincirler, durum geçişlerini herkes doğrulayabildiği için işe yarar; dolayısıyla onları sırları doğrudan depolamak için kullanmak imkânsızdır. Gizli bilgileri blokzincirde saklamanın çeşitli yolları olsa da, bu yolların tümü en azından bir anahtarı saklamak için zincir dışında bir bileşene ihtiyaç duyar.
Bütünlük, bilgi doğrudur, yetkisiz kişiler tarafından, ya da yetkisiz yollarla değiştirilemez (örneğin bir
Transfer
olayı olmadan ERC-20 jetonlarını(opens in a new tab) transfer etmek gibi). Blokzincirde her düğüm her durum değişikliğini doğrular, bu da bütünlüğü sağlar.Erişilebilirlik, bilgiye yetkisi olan herkes tarafından erişilebilir. Blokzincirde bu genellikle her tam düğümde(opens in a new tab) bilginin mevcut olmasıyla sağlanır.
Karmalar L1'e gönderildiği için buradaki farklı çözümlerin hepsi mükemmel bütünlüğe sahiptir. Fakat bunların farklı kullanılabilirlik garantileri vardır.
Ön Koşullar
Blokzincirin temellerini iyi anlamış olmanız gerekir. Bu sayfa okuyucunun ayrıca bloklar, işlemler ve ilgili diğer konulara da aşina olduğunu varsayar.
EIP-4844 blob'ları
Dencun sert çatallanmasından(opens in a new tab) itibaren Ethereum blokzinciri, Ethereum veri blob'larına sınırlı bir kullanım ömrü (başlangıçta yaklaşık 18 gün(opens in a new tab)) ekleyen EIP-4844'ü(opens in a new tab) içerir. Bu blob'lar, benzer bir mekanizma kullanmalarına rağmen yürütüm gazından ayrı olarak fiyatlandırılır. Blob'lar geçici veri göndermenin ucuz bir yoludur.
EIP-4844 blob'larının temel kullanım alanı, toplamaların işlemlerini yayınlamasıdır. İyimser toplamaların işlemleri kendi blokzincirlerinde yayımlaması gerekir. Bu işlemler, toplamanın sıralayıcısının(opens in a new tab) hatalı bir durum kökü göndermesi halinde doğrulayıcıların(opens in a new tab) hatayı düzeltmelerini mümkün kılmak için itiraz süresi(opens in a new tab) boyunca herkese açık olmalıdır.
Bununla birlikte, itiraz süresi geçtikten ve durum kökü kesinleştirildikten sonra bu işlemleri bilmenin tek amacı, zincirin mevcut durumunu kopyalamaktır. Bu durum, çok daha az işleme gerektiren zincir düğümlerinden de alınabilir. Bu nedenle işlem bilgileri yine de blok arayıcıları gibi birkaç yerde saklanmalıdır ancak Ethereum'un sunduğu sansür direnci seviyesi için ödeme yapmaya gerek yoktur.
Sıfır bilgi toplamaları, diğer düğümlerin mevcut durumu çoğaltmasını ve doğruluk kanıtlarını doğrulamasını sağlamak için işlem verilerini de yayınlar ancak bu yine kısa vadeli bir gerekliliktir.
EIP-4844'te yazım gönderimi, bayt başına bir wei'ye (10-18 ETH) mal olur; bu da blob gönderme işlemi de dahil olmak üzere herhangi bir işlemin maliyeti olan 21.000 yürütüm gazına(opens in a new tab) kıyasla ihmal edilebilir düzeydedir. Güncel EIP-4844 fiyatını blobscan.com(opens in a new tab) adresinden görebilirsiniz.
İşte bazı ünlü toplamaların gönderdiği blob'ları görebileceğiniz adresler.
Calldata
Calldata, işlemin bir parçası olarak gönderilen baytları ifade eder. İşlemi içeren blokta, blokzincirin kalıcı kaydının bir parçası olarak saklanır.
Bu, blokzincire kalıcı olarak veri yerleştirmenin en ucuz yoludur. Bayt başına maliyet, 4 yürütüm gazı (bayt sıfırsa) veya 16 gazdır (başka herhangi bir değer). Standart uygulamaya uygun olarak veriler sıkıştırılmışsa, her bayt değeri eşit olasılıkla olacaktır; dolayısıyla ortalama maliyet, bayt başına yaklaşık 15,95 gazdır.
Yazım anında fiyatlar 12 gwei/gaz ve 2300 $/ETH'dir, bu da kilobayt başına maliyetin yaklaşık 45 sent olduğu anlamına gelir. EIP-4844 öncesinde en ucuz yöntem olduğundan bu, toplamaların hata zorlukları(opens in a new tab) için kullanılabilir olması gereken, ancak doğrudan zincir üstünde erişilebilir olması gerekmeyen işlem bilgilerini depolamak için kullanıldığı yöntemdir.
İşte bazı ünlü toplamaların gönderdiği işlemleri görebileceğiniz adresler.
L1 mekanizmalarıyla zincir dışında
Güvenlikten ne kadar ödün vermek isteyeceğinize bağlı olarak, bilgileri başka bir yere yerleştirmeniz ve ihtiyaç duyulduğunda verilere erişilebilmesini sağlayacak bir mekanizma kullanmanız kabul edilebilir. Bunun işe yaraması için iki gereklilik vardır:
Verilerin giriş taahhüdü adı verilen bir karmasını(opens in a new tab) blokzincire gönderin. Bu 32 baytlık tek bir kelime olabilir, dolayısıyla pahalı değildir. Giriş taahhüdü mevcut olduğu sürece bütünlük güvence altındadır. Çünkü aynı değere karma yapacak başka veri bulmak makul değildir. Yani yanlış veri sağlanırsa tespit edilebilir.
Kullanılabilirliği sağlayan bir mekanizmaya sahip olunmalıdır. Örneğin, Redstone'da(opens in a new tab) herhangi bir düğüm kullanılabilirlik itirazı başlatabilir. Sıralayıcının son tarihe kadar zincir üstünde yanıt vermemesi halinde giriş taahhüdü atılır, böylece bilginin hiç gönderilmediği kabul edilir.
Bu, iyimser toplamalarda kabul edilebilirdir çünkü durum kökü için en az bir doğrulayıcının dürüst olduğunu kabul ederiz. Dürüst bir doğrulayıcı aynı zamanda blokları işlemek için gerekli verilere sahip olduğundan emin olur ve bilgiler zincir dışında mevcut değilse bir kullanılabilirlik itirazında bulunur. Bu tip iyimser toplamalar plazma olarak adlandırılır.
Sözleşme kodu
Sadece bir kez yazılması gereken, asla üzerine yazılamayan ve zincir üstünde erişilebilir olması gereken bilgiler, sözleşme kodu olarak saklanabilir. Bu, verilerle bir "akıllı sözleşme" oluşturduktan sonra bilgileri okumak için EXTCODECOPY
(opens in a new tab) kullandığımız anlamına gelir. Bunun avantajı, kod kopyalamanın nispeten ucuz olmasıdır.
EXTCODECOPY
, bellek genişletme maliyetinin dışında bir sözleşmeye ilk erişim için ("soğukken") 2600 gaz ve aynı sözleşmeden sonraki kopyalar için 100 gaz artı 32 bayt kelime başına 3 gaz maliyetine sahiptir. Bayt başına maliyeti 15,95 olan calldata ile karşılaştırıldığında, yaklaşık 200 bayttan itibaren daha ucuzdur. Bellek genişletme maliyeti formülüne(opens in a new tab) göre bellek genişletme maliyeti, 4MB'tan fazla belleğe ihtiyaç duymadığınız sürece calldata ekleme maliyetinden daha azdır.
Elbette bu sadece veriyi okuma maliyetidir. Sözleşmeyi oluşturma maliyeti yaklaşık 32.000 gaz + 200 gaz/bayt'tır. Bu yöntem, sadece aynı bilginin farklı işlemlerde birçok kez okunması gerektiği zaman ekonomiktir.
Sözleşme kodu, 0xEF
ile başlamadığı sürece anlamsız olabilir. 0xEF
ile başlayan sözleşmeler, çok daha katı gereksinimlere sahip olan ethereum nesne formatı(opens in a new tab) olarak yorumlanır.
Olaylar
Olaylar(opens in a new tab), akıllı sözleşmeler tarafından yayılır ve zincir dışı yazılımla okunur. Avantajları, zincir dışı kodun olayları dinleyebiliyor olmasıdır. Maliyeti, gaz(opens in a new tab), 375 artı veri baytı başına 8 gazdır. 12 gwei/gaz ve 2300 $/ETH üzerinden hesaplandığında bir sent artı kilobayt başına 22 sent anlamına gelir.
Depolama
Akıllı sözleşmelerin kalıcı depolamaya(opens in a new tab) erişimi vardır. Ancak, bu çok pahalıdır. Önceden boş olan bir depolama yuvasına 32 baytlık bir kelime yazmak 22.100 gaza mal olabilir(opens in a new tab). 12 gwei/gaz ve 2300 $/ETH'de, yazma işlemi başına yaklaşık 61 sent veya kilobayt başına 19,5 $ anlamına gelir.
Bu, Ethereum'daki en pahalı depolama yöntemidir.
Özet
Bu tabloda farklı seçenekler, bu seçenekleri avantajları ve dezavantajları özetlenmiştir.
Depolama türü | Veri kaynağı | Kullanılabilirlik garantisi | Zincir üstünde kullanılabilirlik | Ek sınırlamalar |
---|---|---|---|---|
EIP-4844 blob'ları | Zincir dışında | ~18 gün(opens in a new tab) süresince Ethereum garantili | Sadece karma kullanılabilir | |
Calldata | Zincir dışında | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Sadece bir sözleşmeye yazıldıysa ve o işlemdeyse kullanılabilir | |
L1 mekanizmalarıyla zincir dışında | Zincir dışında | İtiraz dönemi boyunca "bir dürüst doğrulayıcı" garantisi | Sadece karma | Sadece itiraz döneminde, itiraz mekanizması tarafından garanti edilir |
Sözleşme kodu | Zincir üstünde ya da zincir dışında | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Evet | "Rastgele" bir adrese yazılır, 0xEF ile başlayamaz |
Olaylar | Zincir üstünde | Sonsuz Ethereum garantisi (blokzincirin bir parçası) | Hayır | |
Depolama | Zincir üstünde | Sonsuz Ethereum garantisi (blokzincirin bir parçası ve üzerine yazılana kadar mevcut durum) | Evet |