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 Address
Wyznaczanie PDA
Algorytm wyznaczania, canonical bump, przykłady findProgramAddress z różnymi typami seedów.
Konta PDA
Tworzenie kont na adresach PDA, podpisywanie invoke_signed, wzorce Anchor.
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
| Limit | Wartość | Źródło |
|---|---|---|
| Maksymalna liczba seed | 16 | MAX_SEEDS |
| Maksymalna długość seed | maksymalnie 32 bajty na seed | MAX_SEED_LEN |
| Zakres bump | 0-255 (1 bajt) | Dołączany jako ostatni element seed |
create_program_address koszt | 1 500 CU | create_program_address_units |
find_program_address koszt w najgorszym przypadku | 1 500 na wejściu + 1 500 x iteracje | 1 500 na wejściu + 1 500 za każdą nieudaną próbę bump |
| Maksymalna liczba sygnatariuszy PDA na CPI | 16 | MAX_SIGNERS |
Is this page helpful?