Пост
Поделитесь своими знаниями.
+10
«Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок
При публикации или обновлении модулей разработчики, работающие с Sui Move, часто сталкиваются с проблемой «Обнаружено несколько ошибок проверки исходного кода». Эти ошибки возникают из-за несоответствия между локальными зависимостями и их аналогами в блокчейне, что приводит к неудачным публикациям и проблемам с развертыванием. Ниже приведен сводный пример ошибок, с которыми сталкиваются разработчики:
Failed to publish the Move module(s), reason: [warning] Multiple source verification errors found:
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::vec_set
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::vec_map
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000001::MoveStdlib::bit_vector
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000001::MoveStdlib::ascii
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::hex
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::zklogin_verified_id
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::prover
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::coin
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::dynamic_field
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::transfer
- On-chain version of dependency Sui::zklogin_verified_id was not found.
- On-chain version of dependency Sui::zklogin_verified_issuer was not found.
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::tx_context
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::transfer_policy
- Local dependency did not match its on-chain version at 0000000000000000000000000000000000000000000000000000000000000002::Sui::kiosk
Эта проблема часто возникает из-за:
- Несовпадающие версии между локальной средой разработки (например, Sui CLI) и состоянием сети.
- Различия в конфигурациях пакетов в разных сетях (например, Mainnet и Testnet).
- Отсутствующие или устаревшие зависимости в ончейн-среде.
Ключевые вопросы
- Как автоматизировать выявление и устранение этих несоответствий зависимостей в процессе публикации?
- Какие инструменты или скрипты можно разработать, чтобы локальные зависимости всегда соответствовали их аналогам в блокчейне?
- Есть ли способ упростить этот процесс, интегрировав проверки зависимостей в существующие конвейеры CI/CD или улучшив Sui SDK?
Ваша задача — предложить решение, позволяющее решить эти проблемы и обеспечить более плавное и надежное развертывание для разработчиков Sui Move. Обязательно опубликуйте свое решение ниже.
- Sui
- SDKs and Developer Tools
Ответы
3Позвольте мне объяснить решение и способы устранения**"Множественных ошибок проверки исходного кода**», с которыми вы сталкиваетесь в Sui Move при публикации или обновлении модулей. При локальной разработке модулей Sui Move вы указываете зависимости в файле Move.toml следующим образом:
[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }
В поле rev указана конкретная версия (ветка, тег или хэш коммита) используемого фреймворка Sui.
Если эта версия не соответствует версии, развернутой в блокчейне в вашей целевой сети, во время публикации или обновлений вы столкнетесь с ошибками верификации. Например, в блокчейне может использоваться более старая версия кода, Sui::vec_set
чем ваш локальный код, или такой модуль, Sui::zklogin_verified_id
возможно, не опубликован в целевой сети.
Мое решение — скрипт Bash, который обновляет ваш файл Move.toml, добавляя правильную редакцию фреймворка Sui в зависимости от целевой сети, а затем проверяет настройки, создавая пакет. Сохраните его как update-deps.sh
в каталоге проекта (где находится Move.toml).
#!/bin/bash
# Function to get the latest commit hash for the network-specific branch
get_latest_rev() {
network=$1
case $network in
"testnet")
branch="framework/testnet"
;;
"devnet")
branch="framework/devnet"
;;
"mainnet")
branch="main"
;;
*)
echo "Invalid network specified. Use 'testnet', 'devnet', or 'mainnet'."
exit 1
;;
esac
# Fetch the latest commit hash from the specified branch
rev=$(git ls-remote https://github.com/MystenLabs/sui $branch | cut -f1)
if [ -z "$rev" ]; then
echo "Failed to fetch revision for branch $branch."
exit 1
fi
echo $rev
}
# Function to update Move.toml with the correct revision
update_move_toml() {
network=$1
rev=$(get_latest_rev $network)
# Update the rev field in Move.toml for the Sui dependency
sed -i "s/rev = .*/rev = \"$rev\"/" Move.toml
echo "Updated Move.toml with rev = $rev for $network"
}
# Main function
main() {
if [ $# -ne 1 ]; then
echo "Usage: $0 <network> (e.g., testnet, devnet, mainnet)"
exit 1
fi
network=$1
update_move_toml $network
# Attempt to build the package
if ! sui move build; then
echo "Build failed. Please check for missing dependencies or other issues."
else
echo "Build successful. You can now publish the package."
fi
}
# Run the main function with provided arguments
main "$@"
Вы можете запустить Run chmod +x update-deps.sh
и выполнить его в своей целевой сети. например ./update-deps.sh testnet
Итак, вот что в вашем терминале:
harryphan@MacBook-Pro-2 hello % ./update-deps.sh testnet
Updated Move.toml with rev = 556b6e14896a09f95e7cf460bc8220a3bf997979 for testnet
UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git
INCLUDING DEPENDENCY Sui
INCLUDING DEPENDENCY MoveStdlib
BUILDING hello
Build successful. You can now publish the package.
Мой ответ (за награду +10):
Чтобы автоматически избежать «ошибок при проверке нескольких источников» при развертывании модуля Sui Move, я рекомендую следующий рабочий процесс автоматического разрешения проблем:
🛠️ Пошаговое решение:
- Синхронизация с сетевой версией
Перед публикацией ваш Move.toml должен точно соответствовать версии фреймворка, используемой в целевой сети (Testnet, Devnet или Mainnet).
В противном случае несовпадения зависимостей, например Sui: :vec_set или Sui: :transfer_policy, приведут к ошибкам при публикации.
- Используйте скрипт автоматизации
Создайте сценарий bash с именем update-deps.sh, который:
✅ Получает правильный хеш ревизии для сети ✅ Обновляет вашу зависимость от Move.toml ✅ Перестраивает пакет для проверки совместимости
#! /bin/bash
get_latest_rev () { сеть = 1 доллар кейс $ сеть в «тестовая сеть») branch="фреймворк/тестовая сеть»; «devnet») ветка = «фреймворк/devnet»; «основная сеть») ветка = «основная»; *) echo «Неверная сеть! Используйте: testnet/devnet/mainnet»; выход 1; esac
rev=$ (git ls-remote https://github.com/MystenLabs/sui $branch | cut -f1) эхо $ rev }
update_move_toml () { rev=$ (get_latest_rev 1 доллар) введите -i «s/rev =». */rev =\ "$rev\»/» move.toml echo "✅ Обновленный файл Move.toml с оборотом = $rev» }
главная () {
основное «$@»
✅ Использование:
chmod +x update-deps.sh . Тестовая сеть /update-deps.sh
Это гарантирует, что ваша локальная среда использует точные версии Sui и MovestDlib, развернутые в блокчейне.
🚀 Дополнительные советы:
Интеграция CI/CD: добавьте этот скрипт в рабочий процесс GitHub Actions перед публикацией sui move.
Ведение журнала ошибок: регистрируйте несоответствия версий, чтобы быстрее обнаруживать обновления.
Безопасность модулей: никогда не меняйте общедоступные структурные поля или порядок обновлений — Sui отклонит их.
Автоматизируя синхронизацию зависимостей, вы устраняете причину сбоя при проверке модуля, вызванную #1, и ускоряете развертывание в рабочей среде.
Представлено: г-ном Рифатом Хоссеном Сообщите мне, хотите ли вы перевести это на бенгальский язык или также хотите использовать пример CI/CD YAML ✅
Позвольте мне рассказать о надежном методе устранения «ошибок проверки нескольких источников», с которыми часто сталкиваются разработчики при попытке опубликовать или обновить модули Sui Move.
Во время разработки Sui Move внешние зависимости объявляются в манифесте Move.toml, который обычно имеет следующую структуру:
[dependencies] Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }
Ключ rev указывает точный хэш коммита, ветку или тег репозитория sui-framework, который будет использоваться локально. Однако возникают сложности, когда эта локальная ссылка оказывается несовместимой с канонической версией, развернутой в блокчейне, что приводит к конфликтам при проверке исходного кода во время развертывания.
Например, вы можете увидеть такие сообщения об ошибках, как:
Local dependency did not match its on-chain version at 0x2::Sui::coin On-chain version of dependency Sui::zklogin_verified_id was not found.
Эти расхождения возникают из-за расхождений между локально разрешенным байт-кодом и двоичными файлами, развернутыми в блокчейне. Их можно объяснить следующими причинами:
-
Несовместимые или устаревшие версии в Move.toml
-
Расхождение между средой разработчика и состоянием развертывания целевой сети (например, Mainnet, Testnet, Devnet)
-
Использование локальных модулей, экземпляры которых еще не были созданы в блокчейне
Чтобы устранить эту проблему, я предлагаю автоматизированную утилиту Bash под названием update-deps.sh.
Этот скрипт:
а. Определяет хеш последней канонической версии фреймворка Sui, соответствующей требуемой сети.
b. Программно обновляет поле rev в Move.toml, используя правильный хэш коммита.
c. Проверяет среду, вызывая локальную сборку с помощью sui move build, предотвращая ошибки публикации во время выполнения.
Для этого поместите этот скрипт в корневой каталог проекта Move:
#!/bin/bash
# Retrieve the most recent commit hash from the appropriate branch based on network context
get_latest_rev() {
network=$1
case $network in
"testnet")
branch="framework/testnet"
;;
"devnet")
branch="framework/devnet"
;;
"mainnet")
branch="main"
;;
*)
echo "Invalid network specified. Use 'testnet', 'devnet', or 'mainnet'."
exit 1
;;
esac
rev=$(git ls-remote https://github.com/MystenLabs/sui $branch | cut -f1)
if [ -z "$rev" ]; then
echo "Failed to retrieve commit hash for branch $branch."
exit 1
fi
echo $rev
}
# Apply the revision update to Move.toml
update_move_toml() {
network=$1
rev=$(get_latest_rev $network)
sed -i "s/rev = .*/rev = \"$rev\"/" Move.toml
echo "Move.toml updated with rev = $rev for network: $network"
}
# Entrypoint
main() {
if [ $# -ne 1 ]; then
echo "Usage: $0 <network> (e.g., testnet, devnet, mainnet)"
exit 1
fi
network=$1
update_move_toml $network
# Attempt to compile the package
if ! sui move build; then
echo "Build failed. Please inspect for unresolved dependencies or other conflicts."
else
echo "Build succeeded. You are now primed for module publication."
fi
}
main "$@"
chmod +x update-deps.sh
После этого предоставьте скрипту разрешения на выполнение `./update-deps.sh testnet.
Finally, your expected terminal output should look like this:
и запустите сценарий, указав целевую сеть развертывания
$ ./update-deps.sh testnet
Move.toml updated with rev = 556b6e14896a09f95e7cf460bc8220a3bf997979 for network: testnet UPDATING GIT DEPENDENCY https://github.com/MystenLabs/sui.git INCLUDING DEPENDENCY Sui INCLUDING DEPENDENCY MoveStdlib BUILDING hello Build succeeded. You are now primed for module publication.
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.
- Почему BCS требует точного порядка полей для десериализации, когда структуры Move содержат именованные поля?53
- «Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок43
- Сбой транзакции Sui: объекты, зарезервированные для другой транзакции25
- Как ограничения возможностей взаимодействуют с динамическими полями в гетерогенных коллекциях?05