
Что такое PDA в Solana? Объяснение и примеры (2026)
Содержание
- PDA как хранилище данных «ключ — значение»
- 1. PDA для хранения токенов, связанных с кошельком
- Краткое содержание видео
- 2. PDA для хранения данных вашей программы
- Краткое содержание видео
- 3. PDA для настройки изменяемых параметров программы
- Краткое содержание видео
- 4. PDA для владения токенами и их перевода
- Краткое содержание видео
- Итоги
Спасибо 0xIchigo за рецензирование, Unboxed Software — за программу для рецензий на фильмы, а Paul Verhoeven — за Robocop.
Программы Solana (смарт-контракты) хранят свои данные в отдельных аккаунтах, которые называются программно производными адресами (PDA).
К PDA можно обращаться и обновлять их независимо друг от друга. Это снижает конкуренцию за ресурсы и обеспечивает параллельную обработку.
Хотя сама концепция PDA несложная, начинающим разработчикам бывает непросто ее понять.
Эта статья поможет вам понять PDA как хранилища «ключ — значение» и познакомит с четырьмя практическими примерами их использования.
Начнем.
PDA как хранилище данных «ключ — значение»
Хранилища «ключ — значение» существовали в программировании задолго до блокчейна. Они позволяют быстро находить данные. Поиск значения по заданному ключу в хранилище всегда возвращает одни и те же данные.
В модели программирования Solana роль хранилища «ключ — значение» для вашей программы выполняет система PDA.
Ключ для каждого элемента данных — это особый адрес, созданный из входных сидов, которые определяет программист.
Одинаковые сиды всегда создают один и тот же адрес, поэтому любой пользователь может детерминированно найти данные для заданного набора сидов.
Адреса PDA никогда не конфликтуют с реальными публичными ключами, поскольку их значения находятся «вне кривой». Иными словами, адреса PDA математически отличаются от значений публичных ключей, существующих на кривой Ed25519 в Solana.
Значение — это структура (или объект) с полями и значениями, которые вы как автор программы хотите там хранить.
PDA лучше всего объяснять на примерах, поэтому перейдем к ним.
1. PDA для хранения токенов, связанных с кошельком
Начнем с чужой программы, которой вы уже пользовались. Вы знаете, что в вашем кошельке могут находиться разные токены, каждый со своим балансом. Это и есть первый пример использования PDA!
Баланс каждого вашего токена хранится в аккаунте PDA, сиды для которого определяет программа связанного токен-аккаунта.
Рассмотрим подробнее, как это работает:
Краткое содержание видео
Программа: программа связанного токен-аккаунта
Назначение аккаунта: хранение баланса уникального токена в вашем кошельке
Сиды: адрес кошелька и адрес минта токена
Данные: баланс этого токена в данном кошельке
Преимущество:
Существует каноническое место, где можно найти баланс конкретного токена у пользователя. Поскольку балансы пользователей находятся в отдельных аккаунтах, больше транзакций можно выполнять параллельно, что повышает скорость Solana!
2. PDA для хранения данных вашей программы
Хорошо, но как использовать PDA в качестве универсального хранилища данных в программах Solana? Что нужно учитывать при проектировании сидов и данных для PDA?
Краткое содержание видео
Программа: программа для рецензий на фильмы, которая проверяет владение активом, чтобы повысить вероятность подлинности рецензий
Назначение аккаунта: хранение рецензии каждого владельца актива на фильм
Сиды: адрес кошелька, название фильма и год выхода
Данные:
- текст рецензии (
string) - оценка от 0 до 10, сохраненная как
u8
Преимущество:
Существует каноническое место, где можно найти рецензию пользователя на конкретный фильм. Пользователи могут параллельно обновлять свои рецензии, не блокируя друг друга. Продуманная структура PDA гарантирует, что каждый пользователь сможет оставить только одну рецензию на фильм, и учитывает пограничные случаи — например, когда нехорошие люди снимают новую версию Robocop.
3. PDA для настройки изменяемых параметров программы
При создании собственных приложений вам, скорее всего, понадобятся настраиваемые значения, которые можно менять на протяжении жизненного цикла программы:
- Постоянные значения (например, комиссии вашей платформы)
- Списки адресов минта токенов, которые будет использовать ваша программа
- Флаги функций, которые можно включать и отключать по своему усмотрению
- Состояние программы: активна она или приостановлена (например, возможность администратора приостановить программу — типичный аварийный механизм во многих блокчейн-программах)
Не стоит обновлять программу только ради изменения этих значений, поэтому поместим конфигурацию в аккаунт PDA! Затем можно создать обработчики инструкций для обновления этих значений и проверять, подписаны ли входящие инструкции назначенным аккаунтом «администратора».
В этом случае конфигурация будет содержать список разрешенных публичных ключей, чтобы ограничить круг пользователей, которые могут взаимодействовать с программой. Но при необходимости можно добавить любые другие параметры конфигурации.
Это интересный пример, поскольку возможность использовать PDA для хранения такой глобальной конфигурации может быть неочевидной!
Краткое содержание видео
Программа: любая созданная вами программа
Назначение аккаунта: хранение динамически обновляемой конфигурации
Сиды: "config"
Данные: наша конфигурация — в данном случае список разрешений и аккаунт администратора
allow_list: вектор публичных ключей пользователей, которым разрешено работать с этим приложениемauthority: публичный ключ аккаунта, который может изменять эти настройки (в приложениях Solana словоauthorityобычно указывает на наличие определенных прав). Мы обеспечим подписание привилегированных действий этим аккаунтом!
Преимущество:
Вместо жесткого кодирования определенной конфигурации в исходном коде ее можно оперативно обновлять с помощью функции инструкции в программе.
Кроме того, обновления конфигурации не блокируются изменениями несвязанных данных. При первом развертывании программы также потребуется выполнить intialize_config() и задать аккаунт с соответствующими полномочиями!
4. PDA для владения токенами и их перевода
PDA предназначены не только для хранения данных. Они также могут владеть собственными токен-аккаунтами. Тогда программа подписывает транзакции от имени PDA, чтобы переводить токены из этих токен-аккаунтов в другие места. Благодаря этому программы могут хранить и передавать ценность:
Краткое содержание видео
Программа: программа обмена
Назначение аккаунта:
- Хранение сведений о предложении обмена: какие токены и в каком количестве создатель предложения хочет получить в обмен на предоставленные токены.
- Этот PDA владеет токен-аккаунтом, в котором хранятся предоставленные токены. PDA может подписывать транзакции и переводить токены из этого аккаунта получателям.
Сиды: "offer", ID предложения (любой идентификатор, если он еще не занят) и адрес создателя предложения
Данные:
maker_wanted_token: токен, который нужно получить взамен, представленный публичным ключом адреса минта токенаmaker_wanted_amount: необходимое количество токена (u64)
Преимущество:
Этот PDA позволяет пользователям хранить данные, а также выступает владельцем токен-аккаунта, чтобы хранить токены и переводить их в другие аккаунты.
Итоги
Мы рассмотрели четыре практических примера использования PDA в Solana.
Во-первых, программа связанного токен-аккаунта использует PDA для хранения баланса каждого токена в вашем кошельке.
Во-вторых, созданная вами программа может хранить данные, связанные с конкретными пользователями, используя их публичные ключи, или с конкретными элементами данных, используя назначенные им ID.
В-третьих, программы могут хранить собственную конфигурацию в PDA, а обработчики инструкций только для администраторов позволяют ограничить круг лиц, способных изменять эти настройки.
В-четвертых, ваши PDA могут владеть собственными токен-аккаунтами, позволяя программе хранить средства. Программа может «подписывать» транзакции с этими токенами, просто указав сиды владеющего ими PDA.
PDA не только обеспечивают высокую скорость Solana, но и предоставляют полноценное хранилище «ключ — значение», благодаря которому программы могут быстро находить данные по указанным вами сидам.
Удачи в работе с PDA — и смотрите больше фильмов Paul Verhoeven!
Похожие статьи
Подпишитесь на Helius
Следите за новостями разработки на Solana и получайте уведомления о наших публикациях


