Пост
Поделитесь своими знаниями.
+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
Ответы
5Позвольте мне объяснить решение и способы устранения**"Множественных ошибок проверки исходного кода**», с которыми вы сталкиваетесь в 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.toml) не соответствует той, которую использует целевой блокчейн (Testnet, Devnet, Mainnet). Это несоответствие приводит к ошибкам при проверке, особенно если такие модули, как Sui: :vec_set или Sui: :zklogin_verified_id, отсутствуют или байт-код разных версий отличается.
Чтобы исправить это, обновите версию в раз��еле [dependencies] так, чтобы она точно соответствовала версии, развернутой в блокчейне в целевой сети. Вместо того чтобы делать это вручную, используйте предоставленный сценарий Bash (update-deps.sh) для автоматизации процесса.
Этот скрипт: • Извлекает последний хэш коммита из правой ветки (framework/testnet, framework/devnet или main). • Обновляет значение rev в Move.toml. • Собирает пакет с помощью sui move build, чтобы подтвердить правильность настройки.
Пример использования:
chmod +x update-deps.sh . Тестовая сеть /update-deps.sh
Вы получите следующий результат:
Обновленный файл move.toml с редакцией = 556b6e14896a09f95e7cf460bc8220a3bf997979 для тестовой сети ОБНОВЛЕНИЕ ЗАВИСИМОСТИ ОТ GIT https://github.com/MystenLabs/sui.git ВКЛЮЧАЯ ЗАВИСИМОСТЬ Sui ВКЛЮЧАЯ ЗАВИСИМОСТЬ MovestDlib СТРОИТЕЛЬСТВО, привет Стройте успешно. Теперь вы можете опубликовать пакет.
Это гарантирует соответствие локальной сборки среде выполнения цепочки и позволяет избежать ошибок при проверке исходного кода
Знаете ответ?
Пожалуйста, войдите в систему и поделитесь им.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Заработай свою долю из 1000 Sui
Зарабатывай очки репутации и получай награды за помощь в развитии сообщества Sui.
- Почему BCS требует точного порядка полей для десериализации, когда структуры Move содержат именованные поля?65
- Как максимизировать прибыль, держа SUI: стейкинг и ликвидный стейкинг515
- «Ошибки проверки нескольких источников» в публикациях модуля Sui Move — автоматическое устранение ошибок55
- Ошибка Sui Move — невозможно обработать транзакцию Не найдено действительных газовых монет для транзакции419
- Сбой транзакции Sui: объекты, зарезервированные для другой транзакции410