Документація SolanaРозробка програм

Перевірка програм

Цей посібник призначений бути довідником для розробників, які хочуть впровадити перевірені збірки для своїх програм на Solana. Ми розглянемо, що таке перевірені збірки, як їх використовувати, особливі міркування та найкращі практики для забезпечення автентичності вашої програми в мережі.

Що таке перевірені збірки?

Перевірені збірки гарантують, що виконувана програма, яку ви розгортаєте в мережі Solana, відповідає вихідному коду у вашому репозиторії. Завдяки цьому розробники та користувачі можуть бути впевнені, що програма, яка працює в мережі, точно відповідає публічній кодовій базі, сприяючи прозорості та безпеці.

Процес перевірки включає порівняння хешу програми в мережі з хешем локально зібраної програми з вихідного коду. Це гарантує відсутність розбіжностей між двома версіями.

Хоча перевірена збірка не повинна вважатися безпечнішою за неперевірену збірку, вона дозволяє розробникам самостійно перевірити, що вихідний код відповідає тому, що розгорнуто в мережі. Використовуючи вихідний код, розробник може потім перевірити, що виконує код при відправленні транзакції.

Конвеєр перевірених збірок був розроблений і підтримується Ellipsis Labs та OtterSec. Для детальнішої інформації, дотримуйтесь інструкцій у оригінальному репозиторії перевірених збірок а також процесу перевірки збірки безпосередньо в Anza наборі інструментів, коли це буде підтримуватися.

Як це працює?

Процес верифікації здійснюється шляхом порівняння хешу програми в мережі з хешем локально зібраної програми з вихідного коду. Ви створюєте свою програму в контрольованому середовищі за допомогою Solana Verify CLI та Docker. Це забезпечує детермінований та послідовний процес збірки на різних системах. Після отримання виконуваного файлу ви можете розгорнути його в мережі Solana. Під час процесу збірки буде створено PDA програми верифікації. Цей PDA містить усі дані, необхідні для верифікації програми. PDA містить адресу програми, URL-адресу git, хеш коміту та аргументи, використані для збірки програми.

Використовуючи дані в PDA, кожен може локально запустити команду програми верифікації та перевірити, чи була програма зібрана з наданого вихідного коду. Потім кожен може самостійно перевірити це повністю без довіри або запустити власний API верифікації, який підтримується OtterSec, щоб забезпечити користувачам легкий доступ для перевірки верифікації. Ви вже можете бачити ці API-запити, які використовуються в Solana Explorer та SolanaFM, серед інших місць.

Чому варто використовувати верифіковані збірки?

Використання верифікованих збірок надає такі переваги:

  • Безпека: гарантія того, що програма, яка працює в мережі, відповідає вихідному коду, запобігаючи зловмисним змінам.

  • Прозорість: дозволяє іншим користувачам і розробникам перевіряти, що програма в мережі є надійною, порівнюючи її з публічною кодовою базою.

  • Довіра: підвищення впевненості користувачів, оскільки верифіковані збірки демонструють, що поведінка вашої програми в мережі відповідає вашому публічному коду. Створюючи верифіковані програми, ви мінімізуєте ризики, пов'язані з виконанням несанкціонованого або зловмисного коду. Це також гарантує, що ви дотримуєтесь найкращих практик і надаєте дослідникам безпеки простий спосіб зв'язатися з вами. Крім того, гаманці та інші інструменти можуть легше дозволяти транзакції з вашої програми, якщо вона верифікована.

  • Можливість виявлення: коли ви надаєте перевірену збірку вашої програми, кожен може знайти ваш вихідний код, документацію, SDK програми або IDL, а також легко зв'язатися з вами через github у разі виникнення проблеми.

Як створити перевірені збірки?

Щоб створити перевірені збірки, вам потрібно виконати такі кроки:

Короткий огляд:

  • Зберегти ваш код у публічному репозиторії
  • Створити перевірену збірку в docker
  • Розгорнути перевірену збірку
  • Перевірити розгорнуту програму через публічний API

Якщо ви перевіряєте програму, яка не збудована в контейнері docker, вона, швидше за все, не пройде перевірку, оскільки збірки програм Solana не є детермінованими на різних системах.

Встановіть Docker та Cargo

Встановіть необхідні інструменти: переконайтеся, що у вас встановлені Docker та Cargo. Docker забезпечує контрольоване середовище збірки для забезпечення узгодженості, а Cargo використовується для керування пакетами Rust.

  • Docker: Дотримуйтесь інструкцій на сайті Docker, щоб встановити Docker для вашої платформи. Після встановлення переконайтеся, що служба Docker запущена, дотримуючись цього посібника далі.
  • Cargo: Якщо у вас ще не встановлено Cargo, ви можете встановити його, виконавши таку команду:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Встановіть Solana Verify CLI

Solana Verify CLI — це основний інструмент, який використовується для перевірки збірок. Solana Verify CLI наразі підтримується Ellipsis Labs і може бути встановлений за допомогою Cargo.

Ви можете встановити його, виконавши:

cargo install solana-verify

Якщо вам потрібна конкретна версія CLI, ви можете закріпити версію за допомогою:

cargo install solana-verify --version $VERSION

За бажанням ви можете встановити версію безпосередньо з певного коміту:

cargo install solana-verify --git https://github.com/Ellipsis-Labs/solana-verifiable-build --rev 13a1db2

Підготовка проєкту

Щоб перевірити репозиторій, у ньому має бути файл Cargo.lock у кореневому каталозі. Якщо у вашому репозиторії лише одна програма і файл cargo.lock знаходиться в корені, ви можете одразу перейти до наступного кроку та зібрати вашу програму.

Якщо ваша програма знаходиться в підкаталозі і ви використовуєте робочий простір Rust, вам потрібно створити файл Cargo.toml робочого простору в кореневому каталозі вашого репозиторію.

Ви можете використати цей приклад Cargo.toml як шаблон:

Cargo.toml
[workspace]
members = ["program/programs/*"]
resolver = "2"
[profile.release]
overflow-checks = true
lto = "fat"
codegen-units = 1
[profile.release.build-override]
opt-level = 3
incremental = false
codegen-units = 1

Переконайтеся, що ваша програма знаходиться в масиві workspace/members і що файл Cargo.toml вашої програми має правильно налаштоване ім'я lib.

Важливим є lib name, а не назва пакета!

Щось на кшталт цього:

waffle/Cargo.toml
[package]
name = "waffle"
version = "0.1.0"
edition = "2021"
[lib]
name = "waffle"
crate-type = ["cdylib", "lib"]
[dependencies]
solana-program = "2.1.0"

У цьому репозиторії ви можете побачити приклад робочого простору з програмою в підкаталозі. Зверніть також увагу, що коли програма знаходиться в підкаталозі, вам пізніше потрібно додати цей каталог як --mount-path до команди verify-from-repo.

У цьому репозиторії ви можете знайти приклад Anchor. У цьому репозиторії ви можете знайти приклад нативного Rust.

Після створення цього файлу Cargo.toml ви можете запустити cargo generate-lockfile, щоб створити файл блокування та перейти до збірки вашої програми.

Збірка програм, що підлягають перевірці

Щоб перевірено зібрати вашу програму Solana, перейдіть до каталогу, що містить файл Cargo.toml вашого робочого простору, і виконайте:

solana-verify build

Це скопіює ваше середовище в контейнер Docker і збере його детерміністичним способом.

Переконайтеся, що ви дійсно розгортаєте перевірену збірку і випадково не перезаписуєте її за допомогою anchor build або cargo build-sbf, оскільки вони, швидше за все, не дадуть той самий хеш, і ваша перевірка не пройде.

Для проєктів з кількома програмами ви можете зібрати конкретну програму, використовуючи назву бібліотеки (не назву пакета):

solana-verify build --library-name $PROGRAM_LIB_NAME

Цей процес забезпечує детерміновані збірки і може зайняти деякий час, особливо на певних системах (наприклад, MacBook M1), оскільки він виконується всередині контейнера docker. Для швидших збірок рекомендується використовувати Linux-машину з архітектурою x86.

Після завершення збірки ви можете отримати хеш виконуваного файлу за допомогою наступної команди:

solana-verify get-executable-hash target/deploy/$PROGRAM_LIB_NAME.so

Розгортання верифікованих програм

Після того, як ви зібрали програму та отримали її хеш, ви можете розгорнути її в мережі Solana. Рекомендується використовувати рішення з мультипідписом або управлінням, як-от Squads Protocol для безпечного розгортання, але ви також можете розгорнути безпосередньо за допомогою:

solana program deploy -u $NETWORK_URL target/deploy/$PROGRAM_LIB_NAME.so --program-id $PROGRAM_ID --with-compute-unit-price 50000 --max-sign-attempts 100 --use-rpc

Поточну відповідну комісію з низьким пріоритетом ви можете запитати у свого rpc-провайдера, наприклад Quicknode.

Щоб перевірити, чи відповідає розгорнута програма зібраному виконуваному файлу, виконайте:

solana-verify get-program-hash -u $NETWORK_URL $PROGRAM_ID

У вас можуть бути різні версії, розгорнуті на різних кластерах Solana (тобто devnet, testnet, mainnet). Переконайтеся, що ви використовуєте правильну URL-адресу мережі для потрібного кластера Solana, на якому хочете перевірити програму. Віддалена перевірка працюватиме лише на mainnet.

Перевірка відносно репозиторіїв

Щоб перевірити програму відносно її публічного репозиторію, використовуйте:

solana-verify verify-from-repo -u $NETWORK_URL --program-id $PROGRAM_ID https://github.com/$REPO_PATH --commit-hash $COMMIT_HASH --library-name $PROGRAM_LIB_NAME --mount-path $MOUNT_PATH

Коли ви запускаєте перевірену збірку у каталозі вашої програми, під час запуску verify-from-repo вам потрібно додати прапорець --mount-path. Це буде шлях до папки, що містить Cargo.toml, який містить назву бібліотеки вашої програми.

Ця команда порівнює хеш програми в мережі з хешем виконуваного файлу, створеного з вихідного коду за вказаним хешем коміту.

Наприкінці команда запитає, чи хочете ви завантажити дані верифікації в мережу. Якщо ви це зробите, Solana Explorer одразу покаже дані верифікації вашої програми. Доки вона не буде перевірена віддаленою збіркою, вона відображатиметься як неперевірена. Дізнайтеся, як можна перевірити вашу програму через публічний API у наступному кроці.

Якщо ви хочете прив'язати верифікацію до певного релізу, ви можете додати прапорець --commit-hash до команди.

Верифікація через публічний API

Нарешті, ви також можете безпосередньо перевірити програму через будь-кого, хто запускає API верифікації:

solana-verify verify-from-repo --remote -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1

Рекомендується використовувати платний RPC URL, оскільки інакше ви можете зіткнутися з обмеженнями швидкості безкоштовних RPC. Тому замість -um вам слід використовувати --url yourRpcUrl для більш надійної верифікації.

Прапорець --remote надсилає запит на збірку до API OtterSec, що запускає віддалену збірку вашої програми. Після завершення збірки система перевіряє, що хеш вашої програми в мережі відповідає хешу згенерованого артефакту збірки з вашого репозиторію.

За замовчуванням використовується API OtterSec.

Переконайтеся, що ви обрали "так", коли вас запитають про завантаження даних верифікації в мережу. Це використовується API для перевірки того, що ви завантажили дані верифікації.

Ви також можете запустити віддалене завдання вручну за допомогою:

solana-verify remote submit-job --program-id <program-id> --uploader <address>

Де завантажувач — це адреса, яка має право запису до PDA. У більшості випадків це має бути програмний авторитет. Якщо вашою програмою керує мультипідпис, будь ласка, перейдіть до розділу перевірка мультипідпису цього посібника нижче.

Це надішле завдання до API OtterSec, і ви зможете перевірити статус завдання за допомогою:

solana-verify remote get-job-status --job-id <job-id>

Після успішного завершення перевірки, що може зайняти деякий час, ви зможете побачити вашу програму як перевірену в API OtterSec для окремих програм та в Solana Explorer, SolanaFM, SolScan і згодом також на веб-сайті спільноти SolanaVerify.org, який підтримує 0xDeep, та в API перевірених програм OtterSec, і нарешті в Інформаційній панелі Dune для перевірених програм, сприяючи більш здоровій екосистемі Solana.

Як перевірити вашу програму, якщо вона контролюється мультипідписом, наприклад Squads

Для роботи віддаленої перевірки вам потрібно записати дані перевірки в PDA, підписаний програмним авторитетом. Якщо вашою програмою керує мультипідпис, ви можете експортувати цю транзакцію запису PDA та надіслати її через Squads Protocol або інше рішення для мультипідпису на ваш вибір.

1. Створіть програму, яку можна перевірити

Спочатку створіть програму:

solana-verify build

Це створить збірку, яку можна перевірити, використовуючи контейнер docker з версією solana, вказаною у файлі Cargo.lock.

2. Розгорніть програму

solana config set --url "PayedMainnetRPCAddress" // the public endpoint will be rate limited too much
solana program deploy target/deploy/verify_squads.so

Для решти цього посібника з мультипідпису ми використовуватимемо приклад ID програми 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD.

3. Зробіть коміт та перевірте проти репозиторію

Після цього ми комітимо проєкт до github. Ось приклад: https://github.com/solana-developers/verify-squads

Опціонально: Спробуйте спочатку перевірити локально (ця команда використовує приклад ID програми 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD):

solana-verify verify-from-repo https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD

Просто щоб переконатися, що ваші параметри правильні.

4. Передайте повноваження програми до мультипідпису

Якщо ви ще не передали повноваження вашої програми до мультипідпису та не скопіювали повноваження мультипідпису. Вони вам знадобляться на наступному кроці.

5. Експортуйте PDA транзакцію

Коли у вас локально є повноваження програми, вам буде запропоновано завантажити дані збірки в мережу при використанні команди solana-verify verify-from-repo.

Оскільки ви не можете зробити це, коли використовуєте мультипідпис, вам потрібно експортувати PDA транзакцію вручну, а потім ініціювати транзакцію через Squads.

solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader <your program authority> --encoding base58 --compute-unit-price 0

Це поверне вам транзакцію у форматі base58. Якщо ви хочете транзакцію, закодовану в base64 для використання в інспекторі транзакцій, ви можете використати --encoding base64.

P6vBfcPaaXb8fZoT3NBAYEcdtEj7tubA1k2gBxmFKZ3UWF5YyrmDMFTvLKALCJoUuRsPAjMckudYruCu3eeWQtuDrFbEMLxLFutnKXac974fnkMivcwUdY66VLjbxQT6ATmcy7F4hBtz1G4P1h6iBJLhb8WtrtgY3i4qq45MUEb7RjuMEfUFXKrNgPdGxkz5xvMHq3dxKRcpmEK5k2DkeW6SUQYBVe19Ga3B9GyhTX8k3CMt9JCEah13WyRnQd8GjoK6sTEvGJym6xDNvmd8yiJYSNcaYwEJsjHEUf4Yh6kAC7ki2KRvVAr3NVe1gjqK9McrwSQjtUatvydTG8Zovcr7PPUEMf3yPMgKXjZLB2QpkH63yTTYdNAnWFuv9E6b6nYRqye5XcNi436yKw5U14fXh65yK34bgYLi9328UT1huJELsJU9BRGnGUmb6GWp6c2WL5BhnzgNTSnt9TXFfEgUMzhvKzpVBxLP44hwqqBdyUhHFysCF37531PnmiESq8x1xou23xJ6FcQbc199754MkqQd7tX9CUznGzAEqHGkzn3VBoJnojsKtgYmiTYbdRsT1CU18MbYEE7WvGAvXyxxbpNzbAcc94HrnM6cqRGmwhEBroPfFghTdmzg9D

6. Надішліть транзакцію через Squads

Перейдіть до конструктора транзакцій Squads та імпортуйте транзакцію, закодовану в base58. Переконайтеся, що в симуляції транзакція містить лише виклик до програми перевірки osec та програми бюджету комп'ютера і нічого іншого!

7. Надішліть віддалене завдання верифікації

Після успішного надсилання транзакції до Squads ви можете надіслати віддалене завдання:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD
--uploader <your program authority>

Це все! Ви перевірили свою програму проти публічного репозиторію та надіслали віддалене завдання до API OtterSec. Тепер ви повинні бачити відображення у провіднику Solana та інших місцях.

8. Оновлення програми (Опціонально)

Коли ви оновлюєте свою програму, вам потрібно експортувати нову PDA-транзакцію та знову подати її через Squads.

Виконання оновлення програми:

solana-verify build
solana program write-buffer target/deploy/verify_squads.so --with-compute-unit-price 50000 --max-sign-attempts 50

Потім передайте цей дозвіл на буфер мультипідпису або безпосередньо створіть буфер з дозволом мультипідпису.

solana program set-buffer-authority Fu3k79g53ZozAj47uq1tXrFy4QbQYh7y745DDsxjtyLR --new-buffer-authority 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

9. Експорт та подання нової PDA-транзакції

Не забудьте зберегти ваші зміни в github. Знову експортуйте транзакцію оновлення PDA:

solana-verify export-pda-tx https://github.com/solana-developers/verify-squads --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

Знову подайте транзакцію через Squads.

Ви можете побачити приклад транзакції тут.

Потім подайте запит на ще одну віддалену збірку:

solana-verify remote submit-job --program-id 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD --uploader 3JG6ULvZVCrkKtSSskKNJGe8RNZGFe8Ruev9KUhxzK5K

Результат має бути приблизно таким:

Verification request sent with request id: b63339d2-163e-49ac-b55d-3454c1c2b5b3
Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18
minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.
The provided GitHub build matches the on-chain hash. On Chain Hash:
96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Executable
Hash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:
https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7ed
Check the verification status at:
https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Job
url: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3

Вітаємо, ви верифікували свою програму після оновлення через мультипідпис!

Верифікація з docker-образу

Ви також можете верифікувати вашу програму за допомогою docker-образу, виконавши таку команду:

solana-verify verify-from-image -e
examples/hello_world/target/deploy/hello_world.so -i
ellipsislabs/hello_world_verifiable_build:latest -p
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn

Ця команда завантажує образ, збережений у ellipsislabs/hello_world_verifiable_build:latest, і перевіряє, що хеш виконуваного файлу в контейнері збігається з хешем програми в мережі, яка була передана команді. Оскільки збірка вже завантажена в образ, немає потреби в повній перезбірці виконуваного файлу, що може зайняти багато часу.

Dockerfile, який створює образ ellipsislabs/hello_world_verifiable_build:latest, можна знайти в репозиторії Ellipsis Labs /examples/hello_world.

Нижче наведено очікуваний результат:

Verifying image: "ellipsislabs/hello_world_verifiable_build:latest", on network
"https://api.mainnet-beta.solana.com" against program ID
2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:
"examples/hello_world/target/deploy/hello_world.so"
Executable hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:
08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executable
matches on-chain program data ✅

Приклад верифікованої збірки

Ось приклад верифікації програми з ідентифікатором FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv використовуючи вихідний код з цього репозиторію:

solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

За замовчуванням команда verify-from-repo бере останній коміт у гілці main. Ви також можете вказати певний коміт, якщо хочете продовжити роботу над репозиторієм, використовуючи параметр commit-hash: --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Нарешті, ви також можете безпосередньо верифікувати програму через API OtterSec:

solana-verify verify-from-repo https://github.com/solana-developers/verified-program --url YOUR-RPC-URL --remote --program-id FWEYpBAf9WsemQiNbAewhyESfR38GBBHLrCaU3MpEKWv --mount-path waffle --library-name waffle --commit-hash 5b82b86f02afbde330dff3e1847bed2d42069f4e

Команда --remote надсилає запит на збірку до API OtterSec, що запускає віддалену збірку вашої програми. Після завершення збірки система перевіряє, що хеш вашої програми в мережі відповідає хешу згенерованого артефакту збірки з вашого репозиторію.

Популярні програми, які вже верифіковано

Phoenix

solana-verify verify-from-repo -um --program-id PhoeNiXZ8ByJGLkxNfZRnkUfjvmuYqLR89jjFHGqdXY https://github.com/Ellipsis-Labs/phoenix-v1

Кінцевий результат:

Executable Program Hash from repo: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9
Program hash matches ✅

Squads V3

solana-verify verify-from-repo https://github.com/Squads-Protocol/squads-mpl --commit-hash c95b7673d616c377a349ca424261872dfcf8b19d --program-id SMPLecH534NA9acpos4G6x7uf3LWbCAwZQE9e8ZekMu -um --library-name squads_mpl --bpf

Зверніть увагу, що нам потрібно було вказати library-name, оскільки репозиторій Squads містить кілька програм. Ми використовуємо прапорець --bpf, оскільки squads_mpl був раніше верифікований за допомогою Anchor.

Кінцевий результат:

Executable Program Hash from repo: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
On-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205c
Program hash matches ✅

Drift V2

solana-verify verify-from-repo -um --program-id dRiftyHA39MWEi3m9aunc5MzRF1JYuBsbn6VPcn33UH https://github.com/drift-labs/protocol-v2 --commit-hash 110d3ff4f8ba07c178d69f9bfc7b30194fac56d6 --library-name drift

Кінцевий результат:

Executable Program Hash from repo: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828
Program hash matches ✅

Marginfi V2

solana-verify verify-from-repo -um --program-id MFv2hWf31Z9kbCa1snEPYctwafyhdvnV7FZnsebVacA https://github.com/mrgnlabs/marginfi-v2 --commit-hash d33e649e415c354cc2a1e3c49131725552d69ba0 --library-name marginfi -- --features mainnet-beta

Кінцевий результат:

Executable Program Hash from repo: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5
Program hash matches ✅

Висновок

Використання перевірених збірок на Solana забезпечує цілісність і надійність ваших програм у мережі та дозволяє розробникам знаходити ваші SDK безпосередньо з Solana Explorer. Використовуючи інструменти, такі як Solana Verify CLI та Docker, ви можете підтримувати перевірені та безпечні збірки, які відповідають вашому вихідному коду. Завжди вживайте необхідних заходів для використання узгоджених середовищ і розгляньте рішення для управління для безпечних оновлень і розгортань.

Безпека + Відмова від відповідальності

Хоча перевірені збірки є потужним інструментом для забезпечення цілісності ваших програм Solana, вони не є повністю безтрастовими у стандартній конфігурації. Docker-образи будуються та розміщуються Solana Foundation.

Майте на увазі, що ви будуєте свій проєкт у завантаженому docker-образі, і вся ваша конфігурація копіюється в цей docker-образ для збірки, включаючи потенційно конфіденційну інформацію.

Якщо ви хочете мати повністю безтрастову конфігурацію, ви можете створити docker-образи самостійно та розмістити їх на власній інфраструктурі. Таким чином ви можете бути впевнені, що docker-образи не були підроблені. Ви можете знайти скрипти для створення власних docker-образів у репозиторії Verified builds і ви можете зробити форк та запустити github actions самостійно або перевірити, що вони правильні.

Крім того, для віддаленої перевірки ви довіряєте API OtterSec та Solana Explorer до певної міри.

API або Solana Explorer можуть потенційно відображати неправильну інформацію у разі компрометації.

Якщо ви хочете мати повністю безтрастову конфігурацію, ви можете запустити Verify API самостійно або виконати перевірку програми локально за допомогою команди verify-from-repo, використовуючи дані перевірки в мережі, які зберігаються в PDA, що походить від органу розгортання програм та програми verify.

Програма верифікації розгорнута командою OtterSec і ще не заморожена, тому може бути оновлена в будь-який час.

Solana Foundation, OtterSec та команда Ellipsis Labs не несуть відповідальності за будь-які збитки чи шкоду, які можуть виникнути внаслідок використання конвеєра верифікованих збірок.

Security.txt для програм Solana

Окрім верифікованих збірок, ви також можете додати файл security.txt до вашої програми. У майбутньому, після впровадження, security.txt міститиме відкритий ключ верифікатора для легкого доступу до даних верифікації, що зберігаються в PDA верифікації. PDA, що містить усю інформацію, необхідну для збірки та верифікації програми, походить від адреси програми та pubkey верифікатора. За замовчуванням це той самий pubkey, який створив і розгорнув програму. Але це також може бути інший pubkey, який можна вказати в security.txt.

Функція security.txt дозволяє розробникам вбудовувати контактну та безпекову інформацію безпосередньо в їхні смарт-контракти Solana. Натхненний securitytxt.org, цей підхід забезпечує стандартизований спосіб для дослідників безпеки зв'язатися з розробниками проєкту, навіть якщо вони знають лише адресу контракту.

Навіщо використовувати security.txt?

Для багатьох проєктів, особливо менших або приватних, ідентифікація розробників лише за адресою контракту може бути складною і займати багато часу. Вбудовування файлу security.txt у програму гарантує, що дослідники безпеки можуть легко зв'язатися з потрібними людьми, потенційно запобігаючи експлуатації вразливостей і забезпечуючи своєчасні повідомлення про помилки.

Як впровадити security.txt

Щоб додати security.txt до вашої програми Solana, виконайте такі кроки:

Додайте залежність solana-security-txt до вашого Cargo.toml:

Cargo.toml
[dependencies]
solana-security-txt = "1.1.1"

Використовуйте макрос security_txt! у вашому контракті для визначення інформації про безпеку. Ви можете включити контактні дані, URL-адреси проєкту та навіть політику безпеки. Ось приклад:

#[cfg(not(feature = "no-entrypoint"))]
use {default_env::default_env, solana_security_txt::security_txt};
#[cfg(not(feature = "no-entrypoint"))]
security_txt! {
name: "MyProject",
project_url: "https://myproject.com",
contacts: "email:security@myproject.com,discord:security#1234",
policy: "https://myproject.com/security-policy",
// Optional Fields
preferred_languages: "en,de",
source_code: "https://github.com/solana-developers/solana-game-preset",
source_revision: "5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
source_release: "",
encryption: "",
auditors: "Verifier pubkey: 5vJwnLeyjV8uNJSp1zn7VLW8GwiQbcsQbGaVSwRmkE4r",
acknowledgements: "Thank you to our bug bounty hunters!"
}

Після вбудовування інформації security.txt у вашу програму, її можна легко запитати за допомогою таких інструментів, як Solana Explorer, що гарантує доступність ваших контактних даних та інформації про безпеку для будь-кого, хто хоче повідомити про потенційні проблеми.

Найкращі практики

  • Використовуйте посилання: для інформації, яка може змінюватися (наприклад, контактні дані), рекомендується посилатися на веб-сторінку, а не жорстко кодувати їх у контракті. Це дозволяє уникнути необхідності частих оновлень програми.

  • Перевірка: перед розгортанням перевірте формат і вміст за допомогою інструмента query-security-txt, який може валідувати як програми в мережі, так і локальні бінарні файли:

query-security-txt target/bpfel-unknown-unknown/release/my_contract.so

Вбудовуючи контактну інформацію з безпеки безпосередньо у ваш контракт, ви полегшуєте дослідникам зв'язок з вами, сприяючи кращій безпеці та комунікації в екосистемі Solana.

Це приклад того, як security.txt виглядає в Solana Explorer

Проєкт security.txt підтримується Neodyme Labs

Is this page helpful?

Зміст

Що таке перевірені збірки?Як це працює?Чому варто використовувати верифіковані збірки?Як створити перевірені збірки?Встановіть Docker та CargoВстановіть Solana Verify CLIПідготовка проєктуЗбірка програм, що підлягають перевірціРозгортання верифікованих програмПеревірка відносно репозиторіївВерифікація через публічний APIЯк перевірити вашу програму, якщо вона контролюється мультипідписом, наприклад Squads1. Створіть програму, яку можна перевірити2. Розгорніть програму3. Зробіть коміт та перевірте проти репозиторію4. Передайте повноваження програми до мультипідпису5. Експортуйте PDA транзакцію6. Надішліть транзакцію через Squads7. Надішліть віддалене завдання верифікації8. Оновлення програми (Опціонально)9. Експорт та подання нової PDA-транзакціїВерифікація з docker-образуПриклад верифікованої збіркиПопулярні програми, які вже верифікованоPhoenixSquads V3Drift V2Marginfi V2ВисновокБезпека + Відмова від відповідальностіSecurity.txt для програм SolanaНавіщо використовувати security.txt?Як впровадити security.txtНайкращі практики
Редагувати сторінку