Program Derived Addresses (PDA)

Program Derived Addresses (PDA) — это 32-байтные адреса аккаунтов, которые детерминированно вычисляются из идентификатора программы и набора seed. Гарантируется, что такие адреса не лежат на кривой Ed25519, то есть для них не существует приватного ключа. Только программа, чей идентификатор использовался при вычислении, может "подписывать" для PDA, делая это через invoke_signed во время межпрограммных вызовов (CPI).

Program Derived AddressProgram Derived Address

Основные факты

  • Детерминированность: Одни и те же seed и идентификатор программы всегда дают один и тот же адрес.
  • Вне кривой: Полученный адрес гарантированно не является допустимым публичным ключом Ed25519. Если хэш попадает на кривую, вычисление не удаётся, и пробуется другой bump seed.
  • Нет приватного ключа: Так как адрес вне кривой, никто не может создать криптографическую подпись для него. Программа "подписывает" через механизм invoke_signed рантайма.

Когда использовать PDA

  • Детерминированные адреса: Каждый раз получать один и тот же аккаунт из одних и тех же seed.
  • Подпись программой: Только владеющая программа может подписывать через invoke_signed, что позволяет программам выступать автономными авторитетами.
  • Пользовательское состояние: Получать аккаунты для каждого пользователя из его pubkey как seed (например, ["user", user_pubkey]).
  • Без управления keypair: Нет приватного ключа, который нужно хранить или можно потерять. Адрес вычисляется только из seed.

Ограничения

ОграничениеЗначениеИсточник
Максимум seed16MAX_SEEDS
Максимальная длина seedмаксимум 32 байта на 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 Foundation.
Все права защищены.
Связаться с нами