Ana içeriğe geç
Change page

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:

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.

ToplamaPosta adresi
Optimism(opens in a new tab)0xFF00000000000000000000000000000000000010(opens in a new tab)
Arbitrum(opens in a new tab)0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6(opens in a new tab)
Base(opens in a new tab)0xFF00000000000000000000000000000000008453(opens in a new tab)

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.

ToplamaPosta adresi
Optimism(opens in a new tab)0xFF00000000000000000000000000000000000010(opens in a new tab)
Arbitrum(opens in a new tab)0x1c479675ad559DC151F6Ec7ed3FbF8ceE79582B6(opens in a new tab)
Base(opens in a new tab)0xFF00000000000000000000000000000000008453(opens in a new tab)

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:

  1. 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.

  2. 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 garantisiZincir üstünde kullanılabilirlikEk sınırlamalar
EIP-4844 blob'larıZincir dışında~18 gün(opens in a new tab) süresince Ethereum garantiliSadece karma kullanılabilir
CalldataZincir dışındaSonsuz 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ışındaZincir dışındaİtiraz dönemi boyunca "bir dürüst doğrulayıcı" garantisiSadece karmaSadece itiraz döneminde, itiraz mekanizması tarafından garanti edilir
Sözleşme koduZincir üstünde ya da zincir dışındaSonsuz Ethereum garantisi (blokzincirin bir parçası)Evet"Rastgele" bir adrese yazılır, 0xEF ile başlayamaz
OlaylarZincir üstündeSonsuz Ethereum garantisi (blokzincirin bir parçası)Hayır
DepolamaZincir üstündeSonsuz Ethereum garantisi (blokzincirin bir parçası ve üzerine yazılana kadar mevcut durum)Evet

Bu makale yararlı oldu mu?