Документация 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 workspace, необходимо создать файл workspace 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"

В этом репозитории вы можете увидеть пример workspace с программой во вложенной папке. Обратите внимание, что если программа находится во вложенной папке, позже нужно будет добавить эту папку как --mount-path к команде verify-from-repo.

В этом репозитории вы найдете пример с anchor. В этом репозитории вы найдете пример с native rust.

Когда файл Cargo.toml готов, вы можете запустить cargo generate-lockfile, чтобы создать lock-файл и продолжить сборку вашей программы.

Сборка проверяемых программ

Чтобы воспроизводимо собрать свою программу Solana, перейдите в директорию, где находится файл workspace Cargo.toml, и выполните:

solana-verify build

Это скопирует вашу среду в контейнер docker и выполнит сборку детерминированным образом.

Убедитесь, что вы действительно деплоите проверенную сборку и случайно не перезаписываете её с помощью anchor build или cargo build-sbf, так как, скорее всего, это приведёт к другому хэшу, и ваша верификация не пройдёт.

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

solana-verify build --library-name $PROGRAM_LIB_NAME

Этот процесс обеспечивает детерминированную сборку и может занять некоторое время, особенно на определённых системах (например, MacBook с процессором M1), так как он выполняется внутри контейнера Docker. Для более быстрой сборки рекомендуется использовать машину с архитектурой x86 на базе Linux.

После завершения сборки вы можете получить хэш исполняемого файла, используя следующую команду:

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 и, наконец, в Verified Programs Dune Dashboard, что способствует более здоровой экосистеме 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

В оставшейся части этого руководства по multisig мы будем использовать пример 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 Explorer и других местах.

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.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 ✅

Пример проверенной сборки

Вот пример проверки примерной программы с ID 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 берёт последний коммит из основной ветки. Вы также можете указать определённый коммит, если хотите продолжить работу с репозиторием, используя параметр 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-образов можно найти в репозитории проверенных сборок, и вы можете форкнуть его, запустить действия GitHub самостоятельно или проверить их корректность.

Кроме того, для удаленной проверки вы доверяете API OtterSec и Solana Explorer в определенной степени.

API или Solana Explorer могут потенциально отображать некорректную информацию, если они скомпрометированы.

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

Программа проверки развернута командой OtterSec и пока не заморожена, поэтому может быть обновлена в любое время.

Фонд Solana, 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, чтобы ваши контактные и security-данные были доступны всем, кто хочет сообщить о потенциальных проблемах.

Лучшие практики

  • Используйте ссылки: Для информации, которая может измениться (например, контактные данные), рекомендуется указывать ссылку на веб-страницу, а не жёстко кодировать её в контракте. Это позволяет избежать частых обновлений программы.

  • Верификация: перед деплоем проверьте формат и содержимое с помощью инструмента 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. Экспорт транзакции PDA6. Отправка транзакции через Squads7. Отправка удаленной задачи проверки8. Обновление программы (опционально)9. Экспорт и отправка новой транзакции PDAПроверка с использованием образа DockerПример проверенной сборкиПопулярные программы, которые уже провереныPhoenixSquads V3Drift V2Marginfi V2ЗаключениеБезопасность + Отказ от ответственностиSecurity.txt для программ SolanaЗачем использовать security.txt?Как реализовать security.txtЛучшие практики
Редактировать страницу