Program Derived Addresses (PDA)

Program Derived Addresses (PDA) adalah tempat seperti rumah untuk akun-akun yang di desain untuk dikendalikan oleh suatu program tertentu. Dengan PDA, program bisa memverifikasi alamat tertentu secara terprogram tanpa membutuhkan private key. PDA berfungsi sebagai fondasi untuk Cross-Program Invocationopen in new window, yang memungkinkan aplikasi Solana dapat disusun satu sama lain.

Fakta-Fakta

Fakta

  • PDA adalah string 32 byte yang mirip seperti public key, namun tidak memiliki private key
  • findProgramAddress akan menurunkan sebuah PDA dari programld dan seeds (kumpulan byte) secara deterministik
  • Satu byte (bump) digunakan untuk mendorong sebuah potential PDA dari ed25519 elliptic curve
  • Program bisa memverifikasi PDA-nya dengan menyediakan seeds dan bump untuk invoke_signedopen in new window
  • Sebuah PDA hanya bisa diverifikasi oleh program asalnya
  • Selain untuk mengizinkan program diverifikasi dengan instruksi lain, PDA juga menyediakan antarmuka (interface) seperti hashmap untuk Mengindeks Akun

Lebih Dalam

PDA adalah bahan penting untuk mengembangkan program di Solana. Dengan PDA, program-program dapat memverifikasi akun sambil menjamin tidak ada pengguna dari luar yang bisa memverifikasi akun yang sama. Selain memverifikasi akun, program tertentu juga dapat memodifikasi akun dalam PDA masing-masing.

Accounts matrix

Image courtesy of Pencilflip

Membuat PDA

Untuk memahami konsep PDA, akan sangat membantu untuk memandang PDA sebagai sesuatu yang “ditemukan” dan bukan “diciptakan”. PDA dihasilkan dari kombinasi seeds (seperti string “vote_account”) dan sebuah program id. Kombinasi seeds ini kemudian dijalankan melalui sebuah fungsi sha256 hash untuk melihat bahwa mereka menghasilkan sebuah public key yang berdasarkan pada ed25519 elliptic curve atau tidak.

Dalam menjalankan program id dan seeds dengan sebuah fungsi hash, ada 50% kemungkinan menghasilkan sebuah public key yang valid namun tidak tepat di kurva ekliptik. Dalam kasus ini, yang dapat dilakukan adalah menambahkan sesuatu (fudge) untuk mendorong input dan uji coba ulang. Istilah teknis dari fudge ini adalah bump. Dalam Solana, dimulai dengan bump = 255 dan secara perlahan turunkan nilainya bump = 254, bump = 253 dan seterusnya. Sampai kita mendapatkan alamat (address) yang tidak ada di elliptic curve. Cara ini memang belum sempurna, namun ketika membuahkan hasil, ini memberikan kita cara deterministik untuk menurunkan PDA yang sama berulang kali.

PDA on the ellipitic curve

Berinteraksi dengan PDAs

Ketika sebuah PDA dihasilkan, findProgramAddress akan mengembalikan alamat dan juga bump yang digunakan untuk mengeluarkannya dari elliptic curve. Dilengkapi dengan bump ini, sebuah program dapat memverifikasi instruksi apapun yang dibutuhkan oleh PDA tersebut. Untuk memverifikasi, program harus meloloskan instruksi, sejumlah akun, dan seeds yang digunakan untuk menurunkan PDA ke invoke_signed. Selain memverifikasi instruksi, PDA juga harus memverifikasi hasilnya via invoke_signed.

Ketika pembuatan dangan PDA, sangatlah umum untuk menyimpan bump seedopen in new window di data akun tersebut. Hal ini mengizinkan pada developer untuk memvalidasi sebuah PDA tanpa harus melewati bump sebagai argumen instruksi.

Sumber lainnya

Last Updated:
Contributors: akangaziz