Sui.

Publication

Partagez vos connaissances.

Prime+10

Peera Admin.
Mar 05, 2025
Questions et Réponses avec des Experts

« Erreurs de vérification de sources multiples » dans les publications du module Sui Move - Résolution automatique des erreurs

Les développeurs travaillant avec Sui Move rencontrent fréquemment des problèmes liés à des « erreurs de vérification de sources multiples détectées » lorsqu'ils tentent de publier ou de mettre à niveau des modules. Ces erreurs sont dues à des incohérences entre les dépendances locales et leurs homologues en chaîne, ce qui entraîne des échecs de publication et des problèmes de déploiement. Vous trouverez ci-dessous un exemple consolidé des erreurs auxquelles les développeurs sont confrontés :

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

Ce problème se pose souvent pour les raisons suivantes :

  1. Versions incompatibles entre l'environnement de développement local (par exemple, Sui CLI) et l'état de la chaîne.
  2. Différences dans la configuration des packages entre les réseaux (par exemple, Mainnet contre Testnet).
  3. Dépendances manquantes ou obsolètes dans l'environnement en chaîne.

Questions clés

  • Comment pouvons-nous automatiser la détection et la résolution de ces incohérences de dépendance pendant le processus de publication ?
  • Quels outils ou scripts peuvent être développés pour garantir que les dépendances locales s'alignent toujours sur leurs homologues en chaîne ?
  • Existe-t-il un moyen de rationaliser ce processus en intégrant des contrôles de dépendance dans les pipelines CI/CD existants ou en améliorant le SDK Sui ?

Votre tâche consiste à proposer une solution qui réponde à ces défis, en garantissant des déploiements plus fluides et plus fiables pour les développeurs de Sui Move. N'oubliez pas de publier votre solution ci-dessous.

  • Sui
  • SDKs and Developer Tools
4
3
Partager
Commentaires
.

Réponses

3
0xduckmove.
Mar 7 2025, 09:09

Laissez-moi vous expliquer la solution et comment résoudre les**"Erreurs de vérification de sources multiples** » que vous rencontrez dans Sui Move lors de la publication ou de la mise à niveau de modules. Lorsque vous développez des modules Sui Move localement, vous spécifiez les dépendances dans votre fichier Move.toml, comme suit :

[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }

Le champ rev indique la version spécifique (une branche, une balise ou un hash de validation) du framework Sui que vous utilisez.

Si cette version ne correspond pas à celle déployée sur la blockchain de votre réseau cible, des erreurs de vérification s'afficheront lors de la publication ou des mises à niveau. Par exemple, la blockchain utilise peut-être une version plus ancienne Sui::vec_setque votre code local, ou un module similaire n'est Sui::zklogin_verified_idpeut-être pas publié sur le réseau que vous ciblez.

Ma solution est un script Bash qui met à jour votre fichier Move.toml avec la révision correcte du framework Sui en fonction de votre réseau cible, puis vérifie la configuration en créant votre package. Enregistrez-le update-deps.shdans le répertoire de votre projet (où se trouve 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 "$@"

Vous pouvez l'exécuter Run chmod +x update-deps.shet l'exécuter avec votre réseau cible. comme ./update-deps.sh testnet

Voici donc la sortie de votre terminal :

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
Meilleure réponse
Commentaires
.
md rifat hossen.
Jun 19 2025, 17:22

Ma réponse (pour une prime de +10) :

Pour éviter automatiquement les « erreurs de vérification de sources multiples » lors du déploiement du module Sui Move, je recommande le flux de résolution automatique suivant :


🛠️ Solution étape par étape :

  1. Synchronisation avec la version en chaîne

Avant de publier, votre fichier Move.toml doit correspondre exactement à la révision du framework utilisée sur le réseau cible (Testnet, Devnet ou Mainnet).

Sinon, des incohérences de dépendances telles que Sui : :vec_set ou Sui : :transfer_policy entraîneront des échecs de publication.


  1. Utiliser un script d'automatisation

Créez un script bash nommé update-deps.sh qui :

✅ Récupère le hachage de révision correct pour le réseau ✅ Met à jour votre dépendance Move.toml ✅ Reconstruit votre package pour vérifier la compatibilité

# ! /bin/bash

get_latest_rev () { réseau = 1$ case $network dans « testnet ») branche = « framework/testnet » ; « devnet ») branch="framework/devnet » ; « réseau principal ») branch="main » ; *) echo « Réseau non valide ! Utilisez : « testnet/devnet/mainnet » ; exit 1 ; esac

rev=$ (git ls-remote https://github.com/MystenLabs/sui $branch | cut -f1) écho $rev }

update_move_toml () { rev=$ (get_latest_rev $1) sed -i « s/rev =. */rev = \ "$rev \ »/» Déplacer.toml echo "✅ Mise à jour de Move.toml avec rev = $rev » }

principal () { [$# -ne 1] && echo « Utilisation : 0$ » && sortie 1 update_move_toml $1 sui move build && echo "✅ Construction réussie. Prêt à publier ! » || echo "❌ La compilation a échoué. Vérifiez les dépendances. » }

principal « $@ »


✅ Utilisation :

chmod+x update-deps.sh . réseau de test /update-deps.sh

Cela garantit que votre environnement local utilise les versions exactes de Sui et MoveStdLib déployées en chaîne.


🚀 Conseils supplémentaires :

Intégration CI/CD : ajoutez ce script à votre flux de travail GitHub Actions avant de déplacer la publication.

Journalisation des erreurs : consignez les incohérences entre les versions afin de détecter les mises à niveau plus rapidement.

Sécurité du module : ne modifiez jamais les champs de structure publics ni l'ordre des mises à niveau — Sui les rejettera.


En automatisant la synchronisation des dépendances, vous supprimez la cause #1 de l'échec de la vérification des modules et vous accélérez les déploiements de production.


Proposé par : md rifat hossen Faites-moi savoir si vous voulez que cela soit traduit en bengali ou si vous voulez également un exemple CI/CD YAML ✅

1
Commentaires
.
24p30p.
24p30p2042
Jul 9 2025, 03:59

Permettez-moi de vous expliquer une méthode robuste pour résoudre les « erreurs de vérification de sources multiples » que les développeurs rencontrent fréquemment lorsqu'ils tentent de publier ou de mettre à niveau des modules Sui Move.

Au cours du développement de Sui Move, les dépendances externes sont déclarées dans le manifeste Move.toml, généralement structuré comme suit :

[dependencies] Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }

La clé rev spécifie un hash, une branche ou une balise de validation précis du référentiel sui-framework à utiliser localement. Cependant, des complications surviennent lorsque cette référence locale est mal alignée avec la version canonique déployée sur la blockchain, ce qui entraîne des conflits de vérification des sources lors du déploiement.

Par exemple, vous pouvez observer des messages d'erreur tels que :

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.

Ces divergences apparaissent en raison de la divergence entre le bytecode résolu localement et les binaires déployés en chaîne. Ils peuvent être attribués à :

  1. Révisions incohérentes ou obsolètes dans Move.toml

  2. Divergence entre l'environnement du développeur et l'état de déploiement du réseau cible (par exemple, Mainnet, Testnet, Devnet)

  3. Utilisation de modules localement qui n'ont pas encore été instanciés en chaîne

Pour atténuer ce point de friction, je propose un utilitaire Bash automatisé intitulé update-deps.sh.

Ce script :

a. Détermine le hachage de révision canonique le plus récent du framework Sui correspondant au réseau souhaité.

b. Met à jour par programmation le champ rev dans Move.toml avec le hachage de validation correct.

c. Valide l'environnement en invoquant une version locale via sui move build, en prévenant les erreurs de publication lors de l'exécution.

Pour ce faire, placez ce script dans le répertoire racine de votre projet 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 Ensuite, accordez des autorisations exécutables au script `./update-deps.sh testnet.

Finally, your expected terminal output should look like this:

et invoquez-le en fournissant votre réseau de déploiement cible $ ./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
Commentaires
.

Connaissez-vous la réponse ?

Veuillez vous connecter et la partager.

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

621Publications1665Réponses
Sui.X.Peera.

Gagne ta part de 1000 Sui

Gagne des points de réputation et obtiens des récompenses pour avoir aidé la communauté Sui à se développer.

Campagne de RécompensesAoût