Program Derived Addresses (PDAs)

Program Derived Addresses (PDAs) to 32-bajtowe adresy kont, które są deterministycznie wyznaczane na podstawie identyfikatora programu oraz zestawu seedów. Gwarantowane jest, że nie leżą one na krzywej Ed25519, co oznacza, że nie istnieje dla nich klucz prywatny. Tylko program, którego ID został użyty do wyznaczenia adresu, może "podpisywać" w imieniu PDA — odbywa się to poprzez invoke_signed podczas wywołań międzyprogramowych (CPI).

Program Derived AddressProgram Derived Address

Najważniejsze informacje

  • Deterministyczne: Te same seedy i identyfikator programu zawsze generują ten sam adres.
  • Poza krzywą: Wyznaczony adres jest weryfikowany pod kątem bycia nieprawidłowym kluczem publicznym Ed25519. Jeśli hash przypadkowo trafi na krzywą, wyznaczanie kończy się niepowodzeniem i próbowany jest inny bump seed.
  • Brak klucza prywatnego: Ponieważ adres jest poza krzywą, nikt nie może wygenerować dla niego podpisu kryptograficznego. Program "podpisuje" za pomocą mechanizmu invoke_signed środowiska uruchomieniowego.

Kiedy używać PDA

  • Deterministyczne adresowanie: Za każdym razem wyznacz ten sam adres konta z tych samych seedów.
  • Podpisywanie przez program: Tylko właściciel programu może podpisywać za pomocą invoke_signed, co pozwala programom działać jako autonomiczne autorytety.
  • Stan powiązany z użytkownikiem: Wyznaczaj konta użytkowników na podstawie seedów z ich pubkey (np. ["user", user_pubkey]).
  • Brak zarządzania keypair: Nie ma klucza prywatnego do przechowywania lub utraty. Adres jest wyznaczany wyłącznie z seedów.

Limity

LimitWartośćŹródło
Maksymalna liczba seed16MAX_SEEDS
Maksymalna długość seedmaksymalnie 32 bajty na seedMAX_SEED_LEN
Zakres bump0-255 (1 bajt)Dołączany jako ostatni element seed
create_program_address koszt1 500 CUcreate_program_address_units
find_program_address koszt w najgorszym przypadku1 500 na wejściu + 1 500 x iteracje1 500 na wejściu + 1 500 za każdą nieudaną próbę bump
Maksymalna liczba sygnatariuszy PDA na CPI16MAX_SIGNERS

Is this page helpful?

Spis treści

Edytuj stronę

Zarządzane przez

© 2026 Solana Foundation.
Wszelkie prawa zastrzeżone.
Bądź na bieżąco