Sui.

Пост

Поделитесь своими знаниями.

Награда+10

Peera Admin.
Mar 05, 2025
Экспертные Вопросы и Ответы

«Ошибки проверки нескольких источников» в публикациях модуля 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

Эта проблема часто возникает из-за:

  1. Несовпадающие версии между локальной средой разработки (например, Sui CLI) и состоянием сети.
  2. Различия в конфигурациях пакетов в разных сетях (например, Mainnet и Testnet).
  3. Отсутствующие или устаревшие зависимости в ончейн-среде.

Ключевые вопросы

  • Как автоматизировать выявление и устранение этих несоответствий зависимостей в процессе публикации?
  • Какие инструменты или скрипты можно разработать, чтобы локальные зависимости всегда соответствовали их аналогам в блокчейне?
  • Есть ли способ упростить этот процесс, интегрировав проверки зависимостей в существующие конвейеры CI/CD или улучшив Sui SDK?

Ваша задача — предложить решение, позволяющее решить эти проблемы и обеспечить более плавное и надежное развертывание для разработчиков Sui Move. Обязательно опубликуйте свое решение ниже.

  • Sui
  • SDKs and Developer Tools
4
3
Поделиться
Комментарии
.

Ответы

3
0xduckmove.
Mar 7 2025, 09:09

Позвольте мне объяснить решение и способы устранения**"Множественных ошибок проверки исходного кода**», с которыми вы сталкиваетесь в 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.
5
Лучший ответ
Комментарии
.
md rifat hossen.
Jun 19 2025, 17:22

Мой ответ (за награду +10):

Чтобы автоматически избежать «ошибок при проверке нескольких источников» при развертывании модуля Sui Move, я рекомендую следующий рабочий процесс автоматического разрешения проблем:


🛠️ Пошаговое решение:

  1. Синхронизация с сетевой версией

Перед публикацией ваш Move.toml должен точно соответствовать версии фреймворка, используемой в целевой сети (Testnet, Devnet или Mainnet).

В противном случае несовпадения зависимостей, например Sui: :vec_set или Sui: :transfer_policy, приведут к ошибкам при публикации.


  1. Используйте скрипт автоматизации

Создайте сценарий 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» }

главная () { [$# -ne 1] & echo «Использование: 0 долларов» и выход 1 update_move_toml 1 доллар sui move build & echo "✅ Сборка успешна. Готовы к публикации!» || echo "❌ Сборка не удалась. Проверьте зависимости». }

основное «$@»


✅ Использование:

chmod +x update-deps.sh . Тестовая сеть /update-deps.sh

Это гарантирует, что ваша локальная среда использует точные версии Sui и MovestDlib, развернутые в блокчейне.


🚀 Дополнительные советы:

Интеграция CI/CD: добавьте этот скрипт в рабочий процесс GitHub Actions перед публикацией sui move.

Ведение журнала ошибок: регистрируйте несоответствия версий, чтобы быстрее обнаруживать обновления.

Безопасность модулей: никогда не меняйте общедоступные структурные поля или порядок обновлений — Sui отклонит их.


Автоматизируя синхронизацию зависимостей, вы устраняете причину сбоя при проверке модуля, вызванную #1, и ускоряете развертывание в рабочей среде.


Представлено: г-ном Рифатом Хоссеном Сообщите мне, хотите ли вы перевести это на бенгальский язык или также хотите использовать пример CI/CD YAML ✅

1
Комментарии
.
24p30p.
24p30p2042
Jul 9 2025, 03:59

Позвольте мне рассказать о надежном методе устранения «ошибок проверки нескольких источников», с которыми часто сталкиваются разработчики при попытке опубликовать или обновить модули 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.

Эти расхождения возникают из-за расхождений между локально разрешенным байт-кодом и двоичными файлами, развернутыми в блокчейне. Их можно объяснить следующими причинами:

  1. Несовместимые или устаревшие версии в Move.toml

  2. Расхождение между средой разработчика и состоянием развертывания целевой сети (например, Mainnet, Testnet, Devnet)

  3. Использование локальных модулей, экземпляры которых еще не были созданы в блокчейне

Чтобы устранить эту проблему, я предлагаю автоматизированную утилиту 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.

1
Комментарии
.

Знаете ответ?

Пожалуйста, войдите в систему и поделитесь им.