Konsep Serialize dan Deserialize pada Solana
Bayangkan Kita ingin mengirim sebuah barang (misalnya, baju) ke teman melalui jasa kurir. Kita tidak bisa begitu saja menyerahkan baju itu ke kurir. Kita harus mengemasnya ke dalam kotak yang aman dan sesuai standar pengiriman. Proses mengemas baju ke dalam kotak inilah yang disebut serialize. Saat paket tiba, teman kita akan membuat kotak untuk melihat bajunya. Proses membuka kemasan untuk mendapatkan barang aslinya kembali adalah deserialize. Di Solana, 'baju' adalah data (struct / object), dan 'kotak paket' adalah format byte yang diterima oleh jaringan.
Pernah bertanya-tanya bagaimana sebuah aplikasi web (client) bisa 'berbicara' dengan smart contract (program) di blockchain Solana? Data apa yang sebenarnya mereka kirim bolak-balik? Jawabannya terletak pada dua konsep fundamental yaitu Serialize dan Deserialize.
Secara sederhana, jika data adalah barang yang ingin Kita kirim, serialize adalah proses mengemas barang itu ke dalam kotak standar, dan deserialize adalah proses membuka kotak itu kembali
Mengapa Serialize dan Deserialize Penting di Solana?
Blockchain Solana pada dasarnya adalah sebuah mesin state global. Untuk berinteraksi dengan mesin ini, baik untuk mengirim instruksi ke program atau membaca data dari account, data tersebut harus dalam format standar yang seragam, yaitu urutan byte.
Berikut adalah dua skenario utama di mana serialize dan deserialize digunakan:
- Data Instruksi (Instruction Data): Saat kita memanggil sebuah program di Solana, kita perlu mengirimkan data instruksi. Data ini memberi tahu program fungsi apa yang harus dijalankan dan dengan parameter apa. Aplikasi client harus me-serialize parameter-parameter ini menjadi satu urutan byte sebelum mengirimkannnya dalam sebuah transaksi. Program di Solana kemudian akan me-deserialize urutan byte ini untuk memahami instruksi yang diberikan.
- Data Account (Account Data): Setiap account di Solana dapat menyimpan data. Data ini juga harus dalam format biner. Ketika sebuah program ingin menyimpan state (misalnya, informasi tentang saldo token seorang pengguna), ia akan me-serialize data struct-nya menjadi byte dan menyimpannya ke dalam account. Saat data tersebut perlu dibaca atau dimodifikasi, program akan membaca byte dari account dan me-deserialize kembali menjadi struct yang bisa digunakan.
Format Umum Serialize: Borsh
Meskipun kita bisa menggunakan format serialize apapun, format yang paling umum dan direkomendasikan di ekosistem Solana adalah Borsh.
Borsh adalah singkatan dari Binary Object Representation Serializer for Hashing. Ini adalah format serialize yang dirancang agar ringkas, cepat, dan deterministik. "Deterministik" berarti bahwa data yang sama akan selalu menghasilkan urutan byte yang sama persis, yang sangat penting untuk keamanan dan konsistensi di lingkungan blockchain.
Contoh Sederhana dengan Borsh:
Bayangkan kita memiliki struct di program Rust untuk membuat data instruksi transfer seperti berikut:
pub struct TransferInstruction {
pub amount: u64,
} Jika kita ingin mengirim instruksi untuk mentransfer 100 token, kita tidak bisa begitu saja mengirim amount = 100.
- Serialize (di sisi client): Client akan mengambil nilai 100 (yang merupakan tipe u64) dan menggunakan skema Borsh untuk mengubahnya menjadi urutan byte. Untuk u64, Borsh menggunakan representasi little-endian, sehingga angka 100 akan menjadi [100, 0, 0, 0, 0, 0, 0, 0]. Urutan byte inilah yang dimasukkan ke dalam data transaksi.
- Deserialize (di sisi program Solana): Ketika program Solana menerima transaksi ini, ia akan menerima data instruksi [100, 0, 0, 0, 0, 0, 0, 0] dan menggunakan Borsh untuk mengubahnya kembali menjadi struct TransferInstruction, sehingga program tahu bahwa amount yang dimaksud adalah 100.
Untungnya, framework seperti Anchor menyederhanakan proses ini secara signifikan. Ketika kita mendefinisikan struct instruksi atau state di Anchor, ia secara otomatis menangani proses serialize dan deserialize Borsh di belakang layar.
Kesimpulan & Intinya (TL;DR)
- Serialize: Mengubah data terstruktur menjadi urutan byte.
- Deserialize: Mengubah urutan byte menjadi data terstruktur.
- Kapan digunakan? Saat mengirim data instruksi ke program dan saat menyimpan/membaca data dari account.
- Format Umum: Borsh adalah standar de-facto karena sifatnya yang ringkas, cepat, dan deterministik.
Memahami alur data ini adalah kunci memahami bagaimana client dan program berkomunikasi di jaringan Solana.