Program Derived Addresses (PDA)

Program Derived Addresses (PDA) — це 32-байтові адреси акаунтів, які детерміновано виводяться з ID програми та набору seeds. Вони гарантовано не лежать на кривій Ed25519, що означає, що для них не існує приватного ключа. Лише програма, чий ID було використано при виведенні, може «підписувати» за PDA, і робить це через invoke_signed під час міжпрограмних викликів (CPI).

Program Derived AddressProgram Derived Address

Ключові факти

  • Детерміновані: Однакові seeds та ID програми завжди генерують однакову адресу.
  • Поза кривою: Виведена адреса перевіряється на те, що вона не є валідним публічним ключем Ed25519. Якщо хеш випадково потрапляє на криву, виведення не вдається і пробується інший bump seed.
  • Без приватного ключа: Оскільки адреса поза кривою, ніхто не може створити криптографічний підпис для неї. Програма «підписує» через механізм invoke_signed runtime замість цього.

Коли використовувати PDA

  • Детерміноване адресування: Виводьте той самий акаунт з тих самих seeds кожного разу.
  • Підписування програмою: Лише програма-власник може підписувати через invoke_signed, що дозволяє програмам діяти як автономні авторитети.
  • Стан з прив'язкою до користувача: Виводьте акаунти для кожного користувача з seeds pubkey користувача (наприклад, ["user", user_pubkey]).
  • Без управління keypair: Немає приватного ключа для зберігання чи втрати. Адреса виводиться виключно з seeds.

Обмеження

ОбмеженняЗначенняДжерело
Макс. кількість seeds16MAX_SEEDS
Макс. довжина seed32 байти максимум на seedMAX_SEED_LEN
Діапазон bump0-255 (1 байт)Додається як останній елемент seed
Вартість create_program_address1 500 CUcreate_program_address_units
Найгірший випадок find_program_address1 500 на вхід + 1 500 × ітерації1 500 на вхід + 1 500 за кожен невдалий bump
Макс. PDA підписантів на CPI16MAX_SIGNERS

Is this page helpful?

Зміст

Редагувати сторінку

Керується

© 2026 Фонд Solana.
Всі права захищені.
Залишайтеся на зв'язку