shine-solana/shine/doc/что содержит utils.txt

145 lines
4.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Функции для работы с PDA:
🧩 create_pda(...)
Создаёт новый PDA, если он ещё не существует.
Проверяет, чтобы не было коллизии.
Без записи данных.
🧩 write_to_pda(...)
Просто записывает байты в существующий PDA.
Без создания.
🧩 create_and_write_pda(...)
Комбинированная функция.
Сначала проверяет, есть ли PDA — если нет, создаёт.
Затем записывает данные.
Очень удобна для инициализации одного PDA в один вызов.
🧩 safe_read_pda(...)
Возвращает Vec<u8> с содержимым PDA.
Никогда не паникует: если PDA не существует или пустой — просто отдаёт Vec::new().
Защита от двойного borrow'а (через try_borrow_data()).
Отличный инструмент для безопасного считывания данных.
💡 Да, с этим ты можешь:
Возможность Функция
📦 Создать PDA create_pda
💾 Записать в PDA write_to_pda
⚡ Создать и записать create_and_write_pda
📖 Безопасно прочитать safe_read_pda
🔧 create_pda(...)
🔹 Назначение:
Создаёт новый PDA-аккаунт, если он ещё не существует.
📥 Аргументы:
pda_account: &AccountInfo — аккаунт, который хотим создать
signer: &AccountInfo — аккаунт плательщика (обычно пользователь)
system_program: &AccountInfo — системная программа
program_id: &Pubkey — адрес текущей программы
seeds: &[&[u8]] — массив сидов, по которым создавался PDA
space: u64 — сколько байт выделить под данные
📤 Возвращает:
Result<()> — Ok если успешно, Err если PDA уже существует или при ошибке создания
🧠 Особенности:
Проверяет, что PDA ещё не создан (через pda_account.owner == Pubkey::default())
Выбрасывает ErrCode::PdaAlreadyExists, если уже существует
🔧 write_to_pda(...)
🔹 Назначение:
Записывает бинарные данные в существующий PDA.
📥 Аргументы:
pda_account: &AccountInfo — аккаунт, в который пишем
data: &[u8] — массив байт, которые нужно записать
📤 Возвращает:
Result<()> — Ok при успехе, Err если не удалось получить доступ к данным
🧠 Особенности:
⚠️ Только пишет, не создаёт PDA
Записывает в начало data-секции аккаунта
🔧 create_and_write_pda(...)
🔹 Назначение:
Если PDA ещё не существует — создаёт, затем сразу записывает данные.
📥 Аргументы:
pda_account: &AccountInfo — аккаунт для создания/записи
signer: &AccountInfo — кто оплачивает создание
system_program: &AccountInfo — системная программа
program_id: &Pubkey — адрес текущей программы
seeds: &[&[u8]] — сиды PDA
data: Vec<u8> — данные для записи
space: u64 — сколько байт выделить (при создании)
📤 Возвращает:
Result<()> — Ok при успехе, Err при ошибке создания или записи
🧠 Особенности:
Безопасно создаёт и пишет за один вызов
Не выбрасывает ошибку, если PDA уже существует — просто пишет
🔧 safe_read_pda(...)
🔹 Назначение:
Безопасно считывает байты из PDA. Никогда не паникует.
📥 Аргументы:
pda_account: &AccountInfo — аккаунт для чтения
📤 Возвращает:
Vec<u8> — массив байт с содержимым PDA
→ Если аккаунт не инициализирован или пустой, возвращает Vec::new()
🧠 Особенности:
Не выбрасывает ошибки — только логирует
Полностью безопасно: подходит для чтения read-only PDA в любой ситуации