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
5
5
Поділитися
Коментарі
.

Відповіді

5
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.
7
Найкраща відповідь
Коментарі
.
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 ✅

2
Коментарі
.
BigDev.
Aug 15 2025, 16:31

Ось як пояснити та вирішити «Помилки перевірки кількох джерел» у Sui Move під час публікації чи оновлення:

Ці помилки зазвичай трапляються через те, що ваша локальна версія фреймворку Sui (від Move.toml) не відповідає тому, що використовує цільовий блокчейн (Testnet, Devnet, Mainnet). Ця невідповідність призводить до помилок перевірки, особливо якщо такі модулі, як Sui: :vec_set або Sui: :zklogin_verified_id, відсутні або відрізняються за байтовим кодом у різних версіях.

Щоб виправити це, оновіть версію у вашому розділі [залежності], щоб точно відповідати версії, розгорнутій у ланцюжку для мережі, на яку ви націляєте. Замість того, щоб робити це вручну, використовуйте наданий сценарій Bash (update-deps.sh) для автоматизації процесу.

Цей сценарій: • Витягує останній хеш комітів з правої гілки (framework/testnet, framework/devnet або main). • Оновлює значення rev в Move.toml. • Створює пакет за допомогою sui move build, щоб підтвердити, що налаштування дійсне.

Приклад використання:

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

Ви отримаєте результати, такі як:

Оновлений Move.toml з поворотом = 556b6e14896a09f95e7cf460bc8220a3bf997979 для тестової мережі ОНОВЛЕННЯ ЗАЛЕЖНОСТІ ВІД GIT https://github.com/MystenLabs/sui.git ВКЛЮЧАЮЧИ ЗАЛЕЖНІСТЬ Sui ВКЛЮЧАЮЧИ ЗАЛЕЖНІСТЬ MovestdLib БУДІВНИЦТВО привіт Будуйте успішно. Тепер ви можете опублікувати пакет.

Це гарантує, що ваша локальна збірка відповідає часу виконання ланцюга, уникаючи помилок перевірки джерела

2
Коментарі
.

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

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