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 ✅ Відновлює ваш пакет для перевірки сумісності

#! /бін/баш

отримайте останній_рев () { мережа = $1 кейс $ мережа в «testnet») галузь = «рамка/тестова мережа»;; «devnet») галузь = «фреймворк/devnet»;; «основна мережа») галузь = «головна»;; *) echo «Невірна мережа! Використання: testnet/devnet/мейннет»; вихід 1;; есак

rev = $ (git ls-remote https://github.com/MystenLabs/sui $ гілка | вирізати -f1) ехо $ оборот }

оновлення_рухати_томл () { rev = $ (отримай_останній_рев $1) але -i «s/rev =. */rev =\ "$rev\»/» переміщуйте.toml echo "✅ Оновлено Move.toml з rev = $ rev» }

основна () { [$# -ne 1] && echo «Використання: $0» && вихід 1 оновлення_переміщення_томл $1 sui move build && echo "✅ Побудова успішна. Готові до публікації!» || echo "❌ Збірка не вдалася. Перевірте залежності.» }

основна «$@»


✅ Використання:

хмод+х update-deps.sh . /update-deps.sh тестова мережа

Це гарантує, що ваше локальне середовище використовує точні версії Sui та MovestDlib, розгорнуті в ланцюжку.


🚀 Додаткові поради:

Інтеграція CI/CD: Додайте цей скрипт до робочого процесу дій GitHub перед публікацією 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.

Цей сценарій:

a. Визначає останній канонічний хеш ревізії фреймворку Sui, що відповідає потрібній мережі.

б. Програмно оновлює поле 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
Коментарі
.

Ви знаєте відповідь?

Будь ласка, увійдіть та поділіться нею.

Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.

621Пости1665Відповіді
Sui.X.Peera.

Зароби свою частку з 1000 Sui

Заробляй бали репутації та отримуй винагороди за допомогу в розвитку спільноти Sui.

Кампанія винагородСерпень