Publication
Partagez vos connaissances.
+10
« 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 :
- Versions incompatibles entre l'environnement de développement local (par exemple, Sui CLI) et l'état de la chaîne.
- Différences dans la configuration des packages entre les réseaux (par exemple, Mainnet contre Testnet).
- 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
Réponses
1Laissez-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_set
que votre code local, ou un module similaire n'est Sui::zklogin_verified_id
peut-ê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.sh
dans 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.sh
et 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.
Connaissez-vous la réponse ?
Veuillez vous connecter et la partager.