BARU: Helius mengakuisisi Light Protocol
Apa Itu PDA Solana? Penjelasan dan Contoh
Blog/Dasar-Dasar

Apa Itu PDA Solana? Penjelasan & Contoh (2026)

Edukasi DeveloperMike MacCana di XMike MacCana di LinkedIn
Bacaan 6 menit

Terima kasih kepada 0xIchigo atas ulasannya, Unboxed Software untuk program ulasan film, dan Paul Verhoeven untuk Robocop.

Program Solana (smart contract) menyimpan datanya dalam akun terpisah yang disebut Program Derived Addresses (PDA).

PDA dapat diakses dan diperbarui secara independen, sehingga mengurangi perebutan akses dan memungkinkan pemrosesan paralel.

Meskipun konsep PDA tidak sulit, developer baru mungkin kesulitan memahaminya.

Artikel ini akan membantu Anda memahami PDA sebagai penyimpanan Key/Value dan membagikan empat contoh praktis PDA.

Mari kita mulai.

PDA sebagai Penyimpanan Data Key/Value

Penyimpanan key/value telah digunakan dalam pemrograman bertahun-tahun sebelum blockchain hadir. Penyimpanan ini memungkinkan data ditemukan dengan cepat. Pencarian nilai pada key tertentu di dalam penyimpanan akan selalu menemukan data yang sama.

Dalam model pemrograman Solana, sistem PDA berfungsi sebagai penyimpanan key/value program Anda.

Key untuk setiap bagian data adalah jenis alamat khusus yang dibuat dari seed input yang ditentukan oleh programmer.

Seed yang sama selalu menghasilkan alamat yang sama. Karena itu, siapa pun dapat menemukan data secara deterministik untuk sekumpulan seed tertentu.

Alamat PDA tidak akan pernah bertabrakan dengan public key sebenarnya karena nilainya ‘off curve’. Artinya, alamat yang dibuat untuk PDA secara matematis berbeda dari nilai public key yang ada pada kurva Ed25519 Solana.

Value adalah struct (atau objek) berisi field dan nilai yang ingin Anda, sebagai pembuat program, simpan di sana.

PDA paling mudah dijelaskan melalui contoh. Mari kita lihat.

1. PDA untuk Menyimpan Token yang Terkait dengan Wallet

Mari kita mulai dengan program milik pihak lain—program yang sudah pernah Anda gunakan. Anda tentu tahu bahwa wallet Anda berisi berbagai token, dan masing-masing memiliki saldo sendiri. Selamat datang di contoh PDA pertama Anda!

Setiap saldo token Anda disimpan dalam akun PDA, dengan seed yang ditentukan oleh program Associated Token Account.

Mari kita lihat secara persis cara kerjanya:

Ringkasan Video

Program: program Associated Token Account

Tujuan Akun: menyimpan saldo token unik di wallet Anda

Seed: alamat wallet dan alamat mint token

Data: saldo token ini untuk wallet tersebut

Manfaat:

Tersedia lokasi kanonis untuk mencari kepemilikan token tertentu milik pengguna. Karena saldo pengguna berada di akun terpisah, lebih banyak transaksi dapat dijalankan secara paralel sehingga Solana menjadi cepat!

2. PDA untuk Menyimpan Data Program Anda

Baik, tetapi bagaimana kita dapat menggunakan PDA sebagai penyimpanan data serbaguna dalam program Solana? Apa yang perlu dipertimbangkan saat merancang seed dan data untuk PDA kita?

Ringkasan Video

Program: program ulasan film yang menggunakan kepemilikan aset untuk memastikan ulasan lebih mungkin autentik

Tujuan Akun: menyimpan ulasan film dari setiap pemilik aset

Seed: alamat wallet, nama film, dan tahun rilis

Data:

  1. ulasan tertulis (string)
  2. penilaian dari 0–10 yang disimpan sebagai u8

Manfaat:

Tersedia lokasi kanonis untuk mencari ulasan pengguna atas film tertentu. Pengguna dapat memperbarui ulasan mereka secara paralel tanpa saling memblokir. Desain PDA yang cermat memastikan hanya ada satu ulasan untuk setiap film per pengguna, sekaligus menangani kasus khusus seperti orang jahat yang membuat ulang Robocop.

3. PDA untuk Menetapkan Nilai yang Dapat Dikonfigurasi bagi Program Anda

Saat membuat aplikasi sendiri, Anda mungkin memiliki beberapa nilai yang dapat dikonfigurasi dan ingin ditetapkan sepanjang siklus hidup program: 

  • Nilai konstan (misalnya, biaya untuk platform Anda)
  • Daftar alamat mint token yang akan digunakan program Anda
  • Feature flag yang dapat Anda aktifkan dan nonaktifkan kapan saja
  • Apakah program Anda aktif atau dijeda (misalnya, mengizinkan akun admin menjeda program merupakan fitur darurat yang umum pada banyak program blockchain)

Kita tidak ingin melakukan upgrade program hanya untuk mengubah nilai-nilai ini. Jadi, mari tempatkan konfigurasi kita dalam akun PDA! Setelah itu, kita dapat membuat beberapa instruction handler untuk memperbarui nilai tersebut dan memeriksa bahwa instruksi yang masuk ditandatangani oleh akun ‘admin’ yang ditunjuk. 

Dalam kasus ini, kita akan memiliki konfigurasi berisi daftar public key yang diizinkan agar dapat membatasi siapa saja yang bisa berinteraksi dengan program. Namun, kita juga dapat menambahkan pengaturan konfigurasi lain sesuai kebutuhan.

Ini adalah contoh yang menarik karena penggunaan PDA untuk menyimpan konfigurasi global seperti ini mungkin tidak langsung terlihat jelas!

Ringkasan Video

Program: program apa pun yang Anda buat

Tujuan Akun: menyimpan konfigurasi yang dapat diperbarui secara dinamis

Seed: "config"

Data: konfigurasi kita, yang dalam kasus ini berupa daftar izin dan akun admin

  • allow_list: vektor public key bagi pengguna yang diizinkan menggunakan aplikasi ini
  • authority: public key dari akun yang dapat mengubah pengaturan ini (aplikasi Solana biasanya menggunakan kata authority untuk menunjukkan suatu jenis izin). Kita akan memastikan akun ini menandatangani tindakan dengan hak istimewa!

Manfaat:

Alih-alih melakukan hard-code konfigurasi tertentu ke dalam source code, kita dapat memperbaruinya secara langsung menggunakan fungsi instruksi dalam program.

Pembaruan konfigurasi juga tidak terhambat oleh perubahan pada data yang tidak terkait. Saat pertama kali men-deploy program, Anda juga perlu menjalankan intialize_config() dan menetapkan authority Anda!

4. PDA untuk Memiliki dan Mentransfer Token

PDA tidak hanya digunakan untuk menyimpan data. PDA juga dapat memiliki akun tokennya sendiri. Program kita kemudian menandatangani transaksi sebagai PDA untuk memindahkan token dari akun token tersebut ke tempat lain. Dengan demikian, program kita dapat menyimpan dan mentransfer nilai:

Ringkasan Video

Program: program swap

Tujuan Akun: 

  1. Menyimpan detail penawaran swap, khususnya token dan jumlah token yang diinginkan pembuat penawaran sebagai imbalan atas token yang mereka sediakan. 
  2. PDA ini memiliki akun token yang menyimpan token yang disediakan. PDA dapat menandatangani transaksi dan mentransfer token dari akun ini kepada penerima. 

Seed: "offer", ID penawaran (pengidentifikasi apa pun selama belum digunakan), dan alamat pembuat penawaran

Data:

  • maker_wanted_token: token yang diinginkan sebagai imbalan, dalam bentuk public key dari alamat mint token
  • maker_wanted_amount: jumlah token yang diinginkan (u64)

Manfaat:

PDA ini memungkinkan pengguna menyimpan data sekaligus bertindak sebagai pemilik akun token untuk menyimpan token dan mentransfernya ke akun lain.

Ringkasan

Itulah empat contoh praktis PDA Solana.

Pertama, program Associated Token Account menggunakan PDA untuk menyimpan saldo setiap token yang dimiliki wallet Anda.

Kedua, program yang Anda buat dapat menyimpan data yang terkait dengan pengguna tertentu menggunakan public key mereka, atau dengan item data tertentu menggunakan ID yang telah Anda tetapkan untuk item tersebut.

Ketiga, program dapat menyimpan konfigurasinya sendiri dalam PDA, dengan instruction handler khusus admin yang membatasi siapa saja yang dapat mengubah pengaturan tersebut.

Keempat, PDA Anda dapat memiliki akun tokennya sendiri, sehingga program dapat menyimpan dana. Program Anda dapat ‘menandatangani’ transaksi yang menggunakan token ini cukup dengan menentukan seed PDA yang memilikinya.

PDA tidak hanya membuat Solana cepat, tetapi juga menyediakan penyimpanan key/value lengkap yang memungkinkan program Anda menemukan data dengan cepat berdasarkan seed yang Anda tentukan. 

Selamat bereksperimen dengan PDA, dan jangan lupa menonton lebih banyak film Paul Verhoeven!

Berlangganan Helius

Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan