Program Derived Addresses (PDAs)

Program Derived Addresses (PDAs) là các địa chỉ tài khoản 32-byte được tạo ra một cách xác định từ program ID và một tập hợp các seed. Chúng được đảm bảo không nằm trên đường cong Ed25519, có nghĩa là không tồn tại private key cho chúng. Chỉ có chương trình mà ID của nó được sử dụng trong quá trình tạo ra mới có thể "ký" cho PDA, và nó thực hiện điều này thông qua invoke_signed trong quá trình cross-program invocations (CPIs).

Program Derived AddressProgram Derived Address

Các điểm chính

  • Xác định: Cùng một seed và program ID luôn tạo ra cùng một địa chỉ.
  • Ngoài đường cong: Địa chỉ được tạo ra được xác minh là không phải public key Ed25519 hợp lệ. Nếu hash tình cờ nằm trên đường cong, quá trình tạo ra sẽ thất bại và một bump seed khác sẽ được thử.
  • Không có private key: Vì địa chỉ nằm ngoài đường cong, không ai có thể tạo ra chữ ký mật mã cho nó. Chương trình "ký" thông qua cơ chế invoke_signed của runtime.

Khi nào sử dụng PDAs

  • Địa chỉ xác định: Tạo ra cùng một tài khoản từ cùng một seed mỗi lần.
  • Ký bởi chương trình: Chỉ có chương trình sở hữu mới có thể ký thông qua invoke_signed, cho phép các chương trình hoạt động như các cơ quan có thẩm quyền tự chủ.
  • Trạng thái theo người dùng: Tạo ra các tài khoản cho từng người dùng từ pubkey seed của người dùng (ví dụ: ["user", user_pubkey]).
  • Không cần quản lý keypair: Không có private key để lưu trữ hoặc mất. Địa chỉ được tạo ra hoàn toàn từ các seed.

Giới hạn

Giới hạnGiá trịNguồn
Số lượng seed tối đa16MAX_SEEDS
Độ dài seed tối đaTối đa 32 byte mỗi seedMAX_SEED_LEN
Phạm vi bump0-255 (1 byte)Được thêm vào như phần tử seed cuối cùng
Chi phí create_program_address1.500 CUcreate_program_address_units
Chi phí find_program_address trường hợp xấu nhất1.500 ban đầu + 1.500 x số lần lặp1.500 khi bắt đầu + 1.500 cho mỗi bump thất bại
Số lượng PDA signer tối đa mỗi CPI16MAX_SIGNERS

Is this page helpful?

Mục lục

Chỉnh sửa trang

Quản lý bởi

© 2026 Solana Foundation.
Đã đăng ký bản quyền.
Kết nối