Проверка программ
Это руководство предназначено для разработчиков, которые хотят реализовать проверенные сборки для своих программ на 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. В этом репозитории вы найдете пример с native rust.
С файлом Cargo.toml
на месте вы можете запустить cargo generate-lockfile
,
чтобы создать lock-файл и продолжить сборку вашей программы.
Сборка проверяемых программ
Чтобы собрать вашу программу Solana с возможностью проверки, перейдите в
каталог, содержащий файл 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
Рекомендуется использовать платный URL RPC, так как в противном случае вы можете столкнуться с ограничениями скорости бесплатных 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 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 Explorer и других местах.
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
использует последний коммит в основной
ветке. Вы также можете указать определённый коммит, если хотите продолжить
работу с репозиторием, используя параметр 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-образов можно найти в репозитории проверенных сборок, и вы можете форкнуть его, запустить действия GitHub самостоятельно или проверить их корректность.
Кроме того, для удаленной проверки вы доверяете API OtterSec и Solana Explorer в определенной степени.
API или Solana Explorer могут потенциально отображать некорректную информацию, если они скомпрометированы.
Если вы хотите полностью доверенную настройку, вы можете запустить
Verify API
самостоятельно или выполнить локальную проверку программы, используя команду
verify-from-repo
с использованием данных проверки в цепочке, которые
сохраняются в
PDA,
который выводится из полномочий развертывания программ и
программы проверки.
Программа проверки развернута командой OtterSec и пока не заморожена, поэтому может быть обновлена в любое время.
Фонд Solana, OtterSec и команда Ellipsis Labs не несут ответственности за любые убытки или повреждения, которые могут возникнуть при использовании конвейера проверенных сборок.
Security.txt для программ Solana
В дополнение к проверенным сборкам вы также можете добавить файл security.txt
в свою программу. В будущем, после реализации, security.txt
будет содержать
публичный ключ проверяющего для удобного доступа к данным проверки, хранящимся в
PDA проверки. PDA, содержащий всю необходимую информацию для сборки и проверки
программы, выводится из адреса программы и публичного ключа проверяющего. По
умолчанию это тот же публичный ключ, который создал и развернул программу. Но
это также может быть другой публичный ключ, который можно указать в
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?