Kenapa di Solana Semuanya Adalah Account?
Lupakan sejenak cara kerja Smart Contract di Ethereum. Solana punya pendekatan unik di mana segalanya adalah 'Account'. Dalam tulisan ini, kita akan membongkar tuntas konsep fundamental ini, mulai dari anatominya, perbedaanya dengan program, hingga kenapa kamu harus 'bayar sewa' untuk data yang disimpan.
Apa itu Account di Solana?
Setiap "sesuatu" di Solana itu adalah Account. Dompetmu? itu Account. Program (smart contract)? Itu juga Account. Data yang disimpan oleh sebuah Program? Yep, itu Account juga.
Jadi, Account itu pada dasarnya cuma sebuah bongkahan data (data buffer) tersimpan di jaringan Solana. Setiap Account ini punya alamat unik, yaitu public key-nya.
Yang bikin Solana beda adalah: Program itu stateless.
Artinya, program itu sendiri nggak menyimpan data/state. Program A isinya cuma logika, "jika input X, lakukan Y pada data Z". Nah, "data Z" ini disimpan di Account yang terpisah.
- Program itu kayak aplikasi di komputermu (misal: Notepad, Photoshop).
- Account Data itu kayak file .txt atau .psd yang kamu buka dengan aplikasi itu.
Notepad nggak menyimpan tulisanmu di dalam aplikasinya, kan? Dia cuma alat untuk membaca dan mengedit file .txt. Begitu juga program di Solana.
Setiap Account di Solana punya metadata dan data. Metadata itu berisi 4 hal yaitu:
A. Lamport
lamport adalah jumlah SOL (lebih tepatnya, unit terkecilnya yaitu Lamport) yang dimiliki oleh Account tersebut. 1 SOL = 1.000.000.000 Lamports. Atau bisa juga dikatakan sebagai Saldo di rekening bank-mu.
B. Owner
owner merupakan alamat program yang diizinkan untuk mengubah data di dalam Account ini. Bisa dianalogikan sebagai "File Association" di Windows/Mac. File .txt secara default owner-nya adalah System Program" (yang ngurusin transfer SOL). Tapi kalau kita bikin data program counter, maka owner dari Account data counter itu adalah si Program Counter itu sendiri. Hanya program itu yang boleh ngubah isi data counter-nya.
C. Executable
executable bernilai true dan false. True artinya, Account ini adalah sebuah Program. Isinya adalah kode yang bisa dieksekusi sedangkan False artinya adalah Account ini cuma Data. Isinya hanya data mentah (byte array) yang cuma bisa dibaca-tulis oleh owner-nya.
E. Rent Epoch
rent_epoch merupakan informasi tentang kapan Account ini terakhir bayar "sewa". Kita akan membahasnya lebih detail di bawah.
Account pada Solana juga memiliki Data. Data ini merupakan data mentah yang disimpan dalam bentuk byte array. Program owner akan baca byte array ini, di-deserialize jadi struktur data yang bisa dimengerti (misal: struct UserProfile), diubah nilainya, lalu di-serialize lagi jadi byte array untuk disimpan kembali ke Account.
Jenis-jenis Account
Data Accounts (executable: false)
Tujuannya untuk menyimpan data.
- System Owned Program: Merupakan wallet biasa seperti Phantom atau Solflare. Owner-nya adalah System Program (program bawaan Solana). Karena owner-nya System Program, satu-satunya hal yang bisa dilakukan adalah transfer lamports.
- Program Owner Account (PDA - Program Derived Address): Adalah account data yang dibuat untuk sebuah program. Owner-nya adalah Program Account lain. Contohnya program "X" butuh tempat untuk menyimpan data user. Maka, Program "X" akan membuat sebuah Account baru dan nge-set dirinya sendiri sebagai owner. Cuma Program "X" yang bisa nulis di Account data ini. PDA memiliki alamat unik dan diturunkan dari seed (misal: ID user + kata "profile") dan ID programnya. Ini bikin program bisa "menandatangani" transaksi atas nama PDA ini, seolah-olah PDA punya private key padahal nggak!.
Program Accounts (executable: true)
Ini adalah Account yang isinya kode program yang sudah di-compile. Owner-nya biasanya adalah BPF Loader (program bawaan Solana untuk men-deploy dan menjalankan program lain). Datanya berisi kode BPF (Berkeley Packet Filter) yang bisa dieksekusi oleh Solana runtime. Account ini biasanya "immutable" (nggak bisa diubah) setelah di-deploy, kecuali memang diatur supaya bisa di-upgrade.
Konsep "Rent" (Sewa): Bayar untuk Menyimpan Data
Blockchain itu mahal. Setiap byte data yang disimpan harus divalidasi dan disimpan oleh ribuan validator di seluruh dunia selamanya. Biar nggak ada yang "nyampah" di blockchain (misal bikin data jutaan giga lalu ditinggal) Solana punya konsep Rent.
Kenapa ada Rent? Untuk "memaksa" pengguna membayar biaya penyimpanan data mereka di jaringan. Biar blockchain nggak bengkak sama data yang nggak kepake.
Gimana cara kerjanya? Setiap Account dengan data di dalamnya harus membayar sewa secara periodik. Kalau saldo lamports di sebuah Account habis karena terus-terusan ditarik buat bayar sewa, Account itu akan dihapus dari jaringan dan lamports-nya dikasih ke validator dan datanya hilang permanen.
Solusinya? Rent-Exempt: Cukup menaruh deposit SOL dalam jumlah tertentu ke dalam Account saat pertama kali dibuat. Jumlah deposit ini tergantung seberapa besar ukuran data yang mau disimpan. Kalau saldo lamports di Account-mu lebih besar dari deposit minimum untuk 2 tahun sewa, maka account-mu dianggap rent-exempt (bebas sewa). Deposit ini seperti uang jaminan. Kalau suatu saat nggak butuh Account itu lagi dan ingin menutupnya, seluruh saldo lamports (termasuk depositnya) akan dikembalikan ke wallet-mu.
Inilah kenapa setiap kali kamu mint NFT atau melakukan aksi pertama di sebuah dApp Solana, kamu harus "bayar inisialisasi". Sebagian besar biaya itu sebenarnya adalah deposit untuk membuat Account baru yang rent-exempt.
Key Takeaways (TL;DR)
- Semua di Solana adalah Account.
- Account punya data dan metadata (owner, lamports, executable, rent_epoch).
- Program (executable: true) itu stateless, sedangkan Data (executable: false) itu stateful.
- Owner sebuah Account adalah satu-satunya program yang bisa mengubah data di dalamnya.
- Kamu harus bayar "sewa" untuk menyimpan data di Solana, biasanya dengan cara menjadi rent-exempt (menaruh deposit).