Перевірка програм
Цей посібник призначений бути довідником для розробників, які хочуть впровадити перевірені збірки для своїх програм на 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
як шаблон:
[workspace]members = ["program/programs/*"]resolver = "2"[profile.release]overflow-checks = truelto = "fat"codegen-units = 1[profile.release.build-override]opt-level = 3incremental = falsecodegen-units = 1
Переконайтеся, що ваша програма знаходиться в масиві workspace/members
і що
файл Cargo.toml
вашої програми має правильно налаштоване ім'я lib
.
Важливим є
lib name
, а не назва пакета!
Щось на кшталт цього:
[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 muchsolana 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 buildsolana 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-3454c1c2b5b3Verification in progress... ⏳ [00:18:02] ✅ Process completed. (Done in 18minutes) Program 6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD has been verified.✅ The provided GitHub build matches the on-chain hash. On Chain Hash:96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 ExecutableHash: 96f8c3d9400258f7759408d1f6f8435b4a24d9b52f5a0340d97907e567cb8773 Repo URL:https://github.com/Woody4618/verify-squads/tree/0fb0a2e30c15c51732c0ad5e837975a6f7bbc7edCheck the verification status at:https://verify.osec.io/status/6XBGfP17P3KQAKoJb2s5M5fR4aFTXzPeuC1af2GYkvhD Joburl: https://verify.osec.io/job/b63339d2-163e-49ac-b55d-3454c1c2b5b3
Вітаємо, ви верифікували свою програму після оновлення через мультипідпис!
Верифікація з docker-образу
Ви також можете верифікувати вашу програму за допомогою docker-образу, виконавши таку команду:
solana-verify verify-from-image -eexamples/hello_world/target/deploy/hello_world.so -iellipsislabs/hello_world_verifiable_build:latest -p2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn
Ця команда завантажує образ, збережений у
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 ID2ZrriTQSVekoj414Ynysd48jyn4AX6ZF4TTJRqHfbJfn Executable path in container:"examples/hello_world/target/deploy/hello_world.so"Executable hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Program hash:08d91368d349c2b56c712422f6d274a1e8f1946ff2ecd1dc3efc3ebace52a760 Executablematches 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: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9On-chain Program Hash: 6877a5b732b3494b828a324ec846d526d962223959534dbaf4209e0da3b2d6a9Program 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: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cOn-chain Program Hash: 72da599d9ee14b2a03a23ccfa6f06d53eea4a00825ad2191929cbd78fb69205cProgram 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: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828On-chain Program Hash: e31d58edeabc3c30bf6f2aa60bfaa5e492b41ec203e9006404b463e5adee5828Program 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: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5On-chain Program Hash: 890d68f48f96991016222b1fcbc2cc81b8ef2dcbf280c44fe378c523c108fad5Program 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
:
[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 Fieldspreferred_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?