Конверт в linux формат: dos2unix ~/Загрузки/скрипт/set_owner.sh dos2unix ~/Загрузки/скрипт/reset_owner.sh dos2unix ~/Загрузки/скрипт/send_tx.sh chmod +x ~/Загрузки/скрипт/set_owner.sh chmod +x ~/Загрузки/скрипт/reset_owner.sh chmod +x ~/Загрузки/скрипт/send_tx.sh ==================================== Запуск: ~/Загрузки/скрипт/set_owner.sh ~/Загрузки/скрипт/reset_owner.sh ~/Загрузки/скрипт/send_tx.sh ======================================= Создание Anchor-программы (на которую буду менять owner) 1. Создание проекта В Ubuntu (в домашней папке): anchor init my_owner_program cd my_owner_program 2. Код программы Открой файл programs/my_owner_program/src/lib.rs и замени содержимое на это: use anchor_lang::prelude::*; declare_id!("YourProgram1111111111111111111111111111111"); #[program] pub mod my_owner_program { use super::*; // Просто заглушка, программа ничего не делает pub fn initialize(_ctx: Context) -> Result<()> { Ok(()) } } #[derive(Accounts)] pub struct Initialize {} 🔹 3. ProgramID Пока там стоит "YourProgram1111111111111111111111111111111". Когда ты соберёшь проект, Anchor сам сгенерирует keypair для программы. Выполни: anchor build Посмотри в папке target/deploy/ — там появится файл my_owner_program-keypair.json. Получи ProgramID этой программы: solana address -k target/deploy/my_owner_program-keypair.json Подставь этот ProgramID в declare_id! в коде (lib.rs) и снова собери: anchor build 🔹 4. Деплой в сеть Чтобы загрузить программу в Solana Mainnet: anchor deploy --provider.cluster mainnet После этого твой ProgramID будет активен в mainnet. Этот ProgramID и нужно указывать в твоём скрипте set_owner.sh. ==================================================================== Скрипт deploy_owner_program.sh Сохрани у себя в Ubuntu в файл: #!/bin/bash set -e export PATH="$HOME/.local/share/solana/install/active_release/bin:$PATH" PROJECT_NAME="my_owner_program" PROGRAM_DIR="$HOME/$PROJECT_NAME/programs/$PROJECT_NAME" KEYPAIR_PATH="$HOME/$PROJECT_NAME/target/deploy/${PROJECT_NAME}-keypair.json" echo "=== Шаг 1. Создаём новый Anchor проект ===" if [ ! -d "$HOME/$PROJECT_NAME" ]; then anchor init $PROJECT_NAME fi cd $HOME/$PROJECT_NAME echo "=== Шаг 2. Собираем проект ===" anchor build echo "=== Шаг 3. Получаем ProgramID ===" PROGRAM_ID=$(solana address -k $KEYPAIR_PATH) echo "ProgramID: $PROGRAM_ID" echo "=== Шаг 4. Обновляем declare_id в lib.rs ===" LIB_RS="$PROGRAM_DIR/src/lib.rs" sed -i "s/declare_id!(\".*\");/declare_id!(\"$PROGRAM_ID\");/" $LIB_RS echo "=== Шаг 5. Пересобираем программу с новым ProgramID ===" anchor build echo "=== Шаг 6. Деплой в сеть mainnet ===" anchor deploy --provider.cluster mainnet echo "✅ Готово! Твоя программа задеплоена." echo "ProgramID: $PROGRAM_ID" 🔹 Как использовать Сохрани файл: nano ~/deploy_owner_program.sh Вставь туда содержимое, сохрани (Ctrl+O, Enter, Ctrl+X). Сделай исполняемым: chmod +x ~/deploy_owner_program.sh Запусти: ~/deploy_owner_program.sh 🔹 Что получится Скрипт создаст проект Anchor (если его ещё нет). Сгенерирует ProgramID. Автоматически вставит его в lib.rs. Пересоберёт проект. Загрузит программу в mainnet. В конце выведет твой ProgramID, который потом используешь в set_owner.sh. ============================================================== cd ~/Загрузки/solowner Собери программу: bash Copy code anchor build Получи ProgramID из ключа: bash Copy code solana address -k target/deploy/controlled_wallet-keypair.json Впиши этот ProgramID в два места: в programs/controlled_wallet/src/lib.rs rust Copy code declare_id!("ТВОЙ_PROGRAM_ID"); в Anchor.toml в секции [programs.mainnet] Пересобери: bash Copy code anchor build Задеплой в mainnet: bash Copy code anchor deploy --provider.cluster mainnet =============================================== Сохрани этот текст в файл build_and_deploy.sh в папке ~/Загрузки/solowner: #!/bin/bash set -e PROJECT_NAME="controlled_wallet" PROJECT_DIR="$HOME/Загрузки/solowner" PROGRAM_DIR="$PROJECT_DIR/programs/$PROJECT_NAME" KEYPAIR_PATH="$PROJECT_DIR/target/deploy/${PROJECT_NAME}-keypair.json" LIB_RS="$PROGRAM_DIR/src/lib.rs" ANCHOR_TOML="$PROJECT_DIR/Anchor.toml" echo "=== Шаг 1. Сборка проекта ===" cd $PROJECT_DIR anchor build echo "=== Шаг 2. Получение ProgramID ===" PROGRAM_ID=$(solana address -k $KEYPAIR_PATH) echo "ProgramID: $PROGRAM_ID" echo "=== Шаг 3. Обновление declare_id в lib.rs ===" sed -i "s/declare_id!(\".*\");/declare_id!(\"$PROGRAM_ID\");/" $LIB_RS echo "=== Шаг 4. Обновление Anchor.toml ===" if grep -q "\[programs.mainnet\]" $ANCHOR_TOML; then sed -i "/\[programs.mainnet\]/,/^\[/ s/$PROJECT_NAME = \".*\"/$PROJECT_NAME = \"$PROGRAM_ID\"/" $ANCHOR_TOML else echo "[programs.mainnet]" >> $ANCHOR_TOML echo "$PROJECT_NAME = \"$PROGRAM_ID\"" >> $ANCHOR_TOML fi echo "=== Шаг 5. Пересборка ===" anchor build echo "=== Шаг 6. Деплой в mainnet ===" anchor deploy --provider.cluster mainnet echo "✅ Готово! Твоя программа задеплоена." echo "ProgramID: $PROGRAM_ID" 🔹 Как использовать Создай файл: nano ~/Загрузки/solowner/build_and_deploy.sh Вставь туда содержимое, сохрани (Ctrl+O, Enter, Ctrl+X). Сделай исполняемым: chmod +x ~/Загрузки/solowner/build_and_deploy.sh Запусти: ~/Загрузки/solowner/build_and_deploy.sh ========================================================== 🔹 Как создать скрипт .sh Перейди в папку, где хочешь создать скрипт, например: cd ~/Загрузки/solowner Создай файл (например build_and_deploy.sh) через редактор nano: nano build_and_deploy.sh Вставь внутрь команды (например тот скрипт, что я тебе писал). Сохрани: Ctrl+O → Enter (сохранить) Ctrl+X (выйти) Сделай скрипт исполняемым: chmod +x build_and_deploy.sh Запускай: ./build_and_deploy.sh ============================================ 1. Установи Docker sudo apt update sudo apt install -y docker.io sudo usermod -aG docker $USER После этого перезагрузи Ubuntu (чтобы не писать sudo при каждом запуске Docker). 2. Скачай готовый образ с Anchor docker pull projectserum/build Это «коробка», внутри которой уже есть Rust, Solana, Anchor и правильная версия GLIBC. 3. Перейди в папку с проектом Допустим, у тебя проект лежит здесь: cd ~/Загрузки/solowner 4. Запусти Anchor внутри контейнера docker run --rm -it -v $(pwd):/work projectserum/build bash Теперь ты внутри контейнера. Там уже доступны anchor, solana, cargo. 5. Собери и задеплой В контейнере введи: cd /work anchor build anchor deploy --provider.cluster mainnet docker pull projectserum/build docker pull backpackapp/build:v0.29.0 cd ~/Загрузки/solowner docker run --rm -it -v "$(pwd)":/work backpackapp/build:v0.29.0 bash -c " cd /work && \ anchor build && \ anchor deploy --provider.cluster mainnet Что надо сделать Сгенерируй ключи для программы В корне проекта выполни (в контейнере или на Ubuntu): solana-keygen new -o target/deploy/controlled_wallet-keypair.json Получи ProgramID solana address -k target/deploy/controlled_wallet-keypair.json Ты увидишь строку вроде: 9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin Это и будет твой ProgramID (ровно 44 символа). Подставь его в Anchor.toml [programs.mainnet] controlled_wallet = "9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin" И в lib.rs В начале файла программы должно быть: use anchor_lang::prelude::*; declare_id!("9xQeWvG816bUx9EPjHmaT23yvVM2ZWbrrpZb9PusVFin"); mikle45@mikle45-VirtualBox:~$ cd ~/Загрузки/solowner mikle45@mikle45-VirtualBox:~/Загрузки/solowner$ solana-keygen new -o target/deploy/controlled_wallet-keypair.json solana-keygen: команда не найдена