Program Derived Address (PDA)

Program Derived Address (PDA)는 프로그램 ID와 시드 집합으로부터 결정론적으로 파생된 32바이트 계정 주소입니다. 이 주소는 Ed25519 곡선 위에 있지 않음이 보장되므로, 개인 키가 존재하지 않습니다. 파생에 사용된 프로그램 ID를 가진 프로그램만이 PDA에 대해 "서명"할 수 있으며, 이는 크로스 프로그램 호출(CPI) 중 invoke_signed를 통해 수행됩니다.

Program Derived AddressProgram Derived Address

주요 사항

  • 결정론적: 동일한 시드와 프로그램 ID는 항상 동일한 주소를 생성합니다.
  • 오프커브: 파생된 주소는 유효한 Ed25519 공개 키가 아님이 검증됩니다. 해시가 우연히 곡선 위에 위치하면 파생이 실패하고 다른 bump seed가 시도됩니다.
  • 개인 키 없음: 주소가 오프커브이므로, 누구도 이에 대한 암호화 서명을 생성할 수 없습니다. 프로그램은 런타임의 invoke_signed 메커니즘을 통해 "서명"합니다.

PDA 사용 시기

  • 결정론적 주소 지정: 동일한 시드로부터 매번 동일한 계정을 파생합니다.
  • 프로그램 서명: 소유 프로그램만이 *rsinvoke_signed*를 통해 서명할 수 있어, 프로그램이 자율적 권한으로 작동할 수 있습니다.
  • 사용자 범위 상태: 사용자 pubkey 시드로부터 사용자별 계정을 파생합니다(예: ["user", user_pubkey]).
  • keypair 관리 불필요: 저장하거나 분실할 개인 키가 없습니다. 주소는 순전히 시드로부터 파생됩니다.

제한 사항

제한 사항출처
최대 seed 수16MAX_SEEDS
최대 seed 길이seed당 최대 32바이트MAX_SEED_LEN
Bump 범위0-255 (1바이트)마지막 seed 요소로 추가됨
create_program_address 비용1,500 CUcreate_program_address_units
find_program_address 최악의 경우 비용1,500 진입 + 1,500 x 반복 횟수진입 시 1,500 + 실패한 bump당 1,500
CPI당 최대 PDA 서명자 수16MAX_SIGNERS

Is this page helpful?

목차

페이지 편집

관리자

© 2026 솔라나 재단.
모든 권리 보유.
연결하기