Lompat ke konten utama
Change page

Strategi Penyimpanan Data Rantai Blok

Ada beberapa cara untuk menyimpan informasi baik secara langsung di rantai blok, atau dengan cara yang diamankan oleh rantai blok:

  • Blob EIP-4844
  • Calldata
  • Offchain dengan mekanisme L1
  • "Kode" kontrak
  • Peristiwa
  • Penyimpanan EVM

Pilihan metode mana yang akan digunakan didasarkan pada beberapa kriteria:

  • Sumber informasi. Informasi dalam calldata tidak dapat berasal langsung dari rantai blok itu sendiri.
  • Tujuan informasi. Calldata hanya tersedia dalam transaksi yang menyertakannya. Peristiwa sama sekali tidak dapat diakses secara onchain.
  • Seberapa banyak kerumitan yang dapat diterima? Komputer yang menjalankan full node skala penuh dapat melakukan lebih banyak pemrosesan daripada klien ringan dalam aplikasi yang berjalan di peramban.
  • Apakah perlu memfasilitasi akses mudah ke informasi dari setiap node?
  • Persyaratan keamanan.

Persyaratan keamanan

Secara umum, keamanan informasi terdiri dari tiga atribut:

  • Kerahasiaan (Confidentiality), entitas yang tidak berwenang tidak diizinkan untuk membaca informasi. Hal ini penting dalam banyak kasus, tetapi tidak di sini. Tidak ada rahasia di rantai blok. Rantai blok berfungsi karena siapa pun dapat memverifikasi transisi state, sehingga mustahil menggunakannya untuk menyimpan rahasia secara langsung. Ada cara untuk menyimpan informasi rahasia di rantai blok, tetapi semuanya bergantung pada beberapa komponen offchain untuk menyimpan setidaknya sebuah kunci.

  • Integritas (Integrity), informasi tersebut benar, tidak dapat diubah oleh entitas yang tidak berwenang, atau dengan cara yang tidak sah (misalnya, mentransfer token ERC-20 (terbuka di tab baru) tanpa peristiwa Transfer). Di rantai blok, setiap node memverifikasi setiap perubahan state, yang memastikan integritas.

  • Ketersediaan (Availability), informasi tersedia untuk setiap entitas yang berwenang. Di rantai blok, hal ini biasanya dicapai dengan menyediakan informasi di setiap full node (terbuka di tab baru).

Berbagai solusi di sini semuanya memiliki integritas yang sangat baik, karena hash diposting di L1. Namun, solusi tersebut memiliki jaminan ketersediaan yang berbeda.

Prasyarat

Anda harus memiliki pemahaman yang baik tentang dasar-dasar rantai blok. Halaman ini juga mengasumsikan pembaca sudah familier dengan blok, transaksi, dan topik relevan lainnya.

Blob EIP-4844

Dimulai dengan hardfork Dencun (terbuka di tab baru), rantai blok Ethereum menyertakan EIP-4844 (terbuka di tab baru), yang menambahkan blob data ke Ethereum dengan masa pakai terbatas (awalnya sekitar 18 hari (terbuka di tab baru)). Blob ini diberi harga secara terpisah dari gas eksekusi, meskipun menggunakan mekanisme yang serupa. Blob ini adalah cara yang murah untuk memposting data sementara.

Kasus penggunaan utama untuk blob EIP-4844 adalah agar rollup dapat memublikasikan transaksinya. Rollup Optimistic perlu memublikasikan transaksi di rantai blok mereka. Transaksi tersebut harus tersedia bagi siapa saja selama periode tantangan (terbuka di tab baru) untuk memungkinkan validator (terbuka di tab baru) memperbaiki kesalahan jika sekuenser (terbuka di tab baru) rollup memposting akar state yang salah.

Namun, setelah periode tantangan berlalu dan akar state difinalisasi, tujuan yang tersisa untuk mengetahui transaksi ini adalah untuk mereplikasi state rantai saat ini. State ini juga tersedia dari node rantai, dengan pemrosesan yang jauh lebih sedikit. Jadi informasi transaksi harus tetap dipertahankan di beberapa tempat, seperti penjelajah blok, tetapi tidak perlu membayar untuk tingkat ketahanan sensor yang disediakan Ethereum.

Rollup zero-knowledge juga memposting data transaksinya untuk memungkinkan node lain mereplikasi state yang ada dan memverifikasi bukti validitas, tetapi sekali lagi itu adalah persyaratan jangka pendek.

Pada saat penulisan, memposting di EIP-4844 membutuhkan biaya satu Wei (10-18 ETH) per bita, yang dapat diabaikan dibandingkan dengan 21.000 gas eksekusi yang dibutuhkan oleh transaksi apa pun, termasuk transaksi yang memposting blob (terbuka di tab baru). Anda dapat melihat harga EIP-4844 saat ini di blobscan.com (terbuka di tab baru).

Berikut adalah alamat untuk melihat blob yang diposting oleh beberapa rollup terkenal.

Calldata

Calldata mengacu pada bita yang dikirim sebagai bagian dari transaksi. Ini disimpan sebagai bagian dari catatan permanen rantai blok di dalam blok yang menyertakan transaksi tersebut.

Ini adalah metode termurah untuk menempatkan data secara permanen di rantai blok. Biaya per bita adalah 4 gas eksekusi (jika bitanya nol) atau 16 gas (nilai lainnya). Jika data dikompresi, yang merupakan praktik standar, maka setiap nilai bita memiliki kemungkinan yang sama, sehingga biaya rata-ratanya adalah sekitar 15,95 gas per bita.

Pada saat penulisan, harganya adalah 12 Gwei/gas dan 2300 $/ETH, yang berarti biayanya sekitar 45 sen per kilobita. Karena ini adalah metode termurah sebelum EIP-4844, ini adalah metode yang digunakan rollup untuk menyimpan informasi transaksi, yang harus tersedia untuk tantangan kesalahan (terbuka di tab baru), tetapi tidak perlu dapat diakses secara langsung secara onchain.

Berikut adalah alamat untuk melihat transaksi yang diposting oleh beberapa rollup terkenal.

Offchain dengan mekanisme L1

Bergantung pada kompromi keamanan Anda, mungkin dapat diterima untuk menempatkan informasi di tempat lain dan menggunakan mekanisme yang memastikan data tersedia saat dibutuhkan. Ada dua persyaratan agar ini berfungsi:

  1. Memposting hash (terbuka di tab baru) data di rantai blok, yang disebut komitmen input (input commitment). Ini bisa berupa kata 32-bita tunggal, sehingga tidak mahal. Selama komitmen input tersedia, integritas terjamin karena tidak mungkin menemukan data lain yang akan di-hash ke nilai yang sama. Jadi jika data yang salah diberikan, hal itu dapat dideteksi.

  2. Memiliki mekanisme yang memastikan ketersediaan. Misalnya, di Redstone (terbuka di tab baru) node mana pun dapat mengajukan tantangan ketersediaan. Jika sekuenser tidak merespons secara onchain pada tenggat waktu, komitmen input dibuang, sehingga informasi tersebut dianggap tidak pernah diposting.

Ini dapat diterima untuk rollup Optimistic karena kita sudah mengandalkan setidaknya satu pemverifikasi yang jujur untuk akar state. Pemverifikasi yang jujur tersebut juga akan memastikan ia memiliki data untuk memproses blok, dan mengeluarkan tantangan ketersediaan jika informasi tersebut tidak tersedia secara offchain. Jenis rollup Optimistic ini disebut Plasma.

Kode kontrak

Informasi yang hanya perlu ditulis sekali, tidak pernah ditimpa, dan harus tersedia secara onchain dapat disimpan sebagai kode kontrak. Ini berarti kita membuat "kontrak pintar" dengan data tersebut dan kemudian menggunakan EXTCODECOPY (terbuka di tab baru) untuk membaca informasi tersebut. Keuntungannya adalah menyalin kode relatif murah.

Selain biaya ekspansi memori, EXTCODECOPY membutuhkan biaya 2600 gas untuk akses pertama ke kontrak (saat masih "dingin") dan 100 gas untuk salinan berikutnya dari kontrak yang sama ditambah 3 gas per kata 32 bita. Dibandingkan dengan calldata, yang membutuhkan biaya 15,95 per bita, ini lebih murah mulai dari sekitar 200 bita. Berdasarkan rumus untuk biaya ekspansi memori (terbuka di tab baru), selama Anda tidak membutuhkan lebih dari 4MB memori, biaya ekspansi memori lebih kecil daripada biaya penambahan calldata.

Tentu saja, ini hanyalah biaya untuk membaca data. Untuk membuat kontrak membutuhkan biaya sekitar 32.000 gas + 200 gas/bita. Metode ini hanya ekonomis ketika informasi yang sama perlu dibaca berkali-kali dalam transaksi yang berbeda.

Kode kontrak bisa saja tidak masuk akal, selama tidak dimulai dengan 0xEF. Kontrak yang dimulai dengan 0xEF ditafsirkan sebagai format objek ethereum (terbuka di tab baru), yang memiliki persyaratan yang jauh lebih ketat.

Peristiwa

Peristiwa (terbuka di tab baru) dipancarkan oleh kontrak pintar, dan dibaca oleh perangkat lunak offchain. Keuntungannya adalah kode offchain dapat mendengarkan peristiwa. Biayanya adalah gas (terbuka di tab baru), 375 ditambah 8 gas per bita data. Pada 12 Gwei/gas dan 2300 $/ETH, ini berarti satu sen ditambah 22 sen per kilobita.

Penyimpanan

Kontrak pintar memiliki akses ke penyimpanan persisten (terbuka di tab baru). Namun, ini sangat mahal. Menulis kata 32 bita ke slot penyimpanan yang sebelumnya kosong dapat membutuhkan biaya 22.100 gas (terbuka di tab baru). Pada 12 Gwei/gas dan 2300 $/ETH, ini sekitar 61 sen per operasi penulisan, atau $19,5 per kilobita.

Ini adalah bentuk penyimpanan paling mahal di Ethereum.

Ringkasan

Tabel ini merangkum berbagai opsi, serta kelebihan dan kekurangannya.

Jenis penyimpananSumber dataJaminan ketersediaanKetersediaan onchainBatasan tambahan
Blob EIP-4844OffchainJaminan Ethereum selama ~18 hari (terbuka di tab baru)Hanya hash yang tersedia
CalldataOffchainJaminan Ethereum selamanya (bagian dari rantai blok)Hanya tersedia jika ditulis ke kontrak, dan pada transaksi tersebut
Offchain dengan mekanisme L1OffchainJaminan "satu pemverifikasi jujur" selama periode tantanganHanya hashDijamin oleh mekanisme tantangan, hanya selama periode tantangan
Kode kontrakOnchain atau offchainJaminan Ethereum selamanya (bagian dari rantai blok)YaDitulis ke alamat "acak", tidak dapat dimulai dengan 0xEF
PeristiwaOnchainJaminan Ethereum selamanya (bagian dari rantai blok)Tidak
PenyimpananOnchainJaminan Ethereum selamanya (bagian dari rantai blok dan state saat ini hingga ditimpa)Ya