Beitrag
Teile dein Wissen.
+10
Fehler bei der Überprüfung mehrerer Quellen“ in den Veröffentlichungen des Sui Move-Moduls — Automatisierte Fehlerbehebung
Entwickler, die mit Sui Move arbeiten, stoßen beim Versuch, Module zu veröffentlichen oder zu aktualisieren, häufig auf Probleme im Zusammenhang mit „Fehler bei der Überprüfung mehrerer Quellen gefunden“. Diese Fehler treten aufgrund von Diskrepanzen zwischen lokalen Abhängigkeiten und ihren Gegenstücken in der Kette auf, was zu fehlgeschlagenen Veröffentlichungen und Problemen bei der Bereitstellung führt. Im Folgenden finden Sie ein konsolidiertes Beispiel für die Fehler, mit denen Entwickler konfrontiert sind:
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
Dieses Problem tritt häufig auf aufgrund von:
- Die Versionen zwischen der lokalen Entwicklungsumgebung (z. B. Sui CLI) und dem On-Chain-Status stimmen nicht überein.
- Unterschiede in den Paketkonfigurationen zwischen Netzwerken (z. B. Mainnet vs. Testnet).
- Fehlende oder veraltete Abhängigkeiten in der On-Chain-Umgebung.
Wichtige Fragen
- Wie können wir die Erkennung und Behebung dieser Abhängigkeiten während des Veröffentlichungsprozesses automatisieren?
- Welche Tools oder Skripte können entwickelt werden, um sicherzustellen, dass lokale Abhängigkeiten immer mit denen auf der Kette übereinstimmen?
- Gibt es eine Möglichkeit, diesen Prozess zu rationalisieren, indem man Abhängigkeitsprüfungen in bestehende CI/CD-Pipelines integriert oder das Sui SDK erweitert?
Ihre Aufgabe ist es, eine Lösung vorzuschlagen, die diese Herausforderungen bewältigt und eine reibungslosere und zuverlässigere Bereitstellung für Sui Move-Entwickler gewährleistet. Stellen Sie sicher, dass Sie Ihre Lösung unten veröffentlichen.
- Sui
- SDKs and Developer Tools
Antworten
3Lassen Sie mich die Lösung erklären und wie Sie die**"Fehler bei der Überprüfung mehrerer Quellen**“ beheben können, auf die Sie in Sui Move beim Veröffentlichen oder Aktualisieren von Modulen stoßen. Wenn Sie Sui Move-Module lokal entwickeln, spezifizieren Sie Abhängigkeiten in Ihrer Move.toml-Datei wie folgt:
[dependencies]
Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }
Das Feld rev gibt die spezifische Version (ein Branch, ein Tag oder ein Commit-Hash) des Sui-Frameworks an, das Sie verwenden.
Wenn diese Version nicht mit der Version übereinstimmt, die auf der Blockchain für Ihr Zielnetzwerk bereitgestellt wird, treten bei der Veröffentlichung oder bei Upgrades Überprüfungsfehler auf. Beispielsweise verwendet die Blockchain möglicherweise eine ältere Version Sui::vec_set
Ihres lokalen Codes, oder ein solches Modul ist Sui::zklogin_verified_id
möglicherweise nicht in dem Netzwerk veröffentlicht, auf das Sie abzielen.
Meine Lösung ist ein Bash-Skript, das Ihre Move.toml-Datei mit der richtigen Version des Sui-Frameworks basierend auf Ihrem Zielnetzwerk aktualisiert und dann das Setup überprüft, indem es Ihr Paket erstellt. Speichern Sie es wie update-deps.sh
in Ihrem Projektverzeichnis (wo sich Move.toml befindet).
#!/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 "$@"
Sie können Run chmod +x update-deps.sh
es mit Ihrem Zielnetzwerk ausführen und ausführen. wie ./update-deps.sh testnet
Also hier ist der Ausgang in deinem 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.
Meine Antwort (für +10 Bounty):
Um bei der Bereitstellung des Sui Move-Moduls automatisch „Fehler bei der Überprüfung mehrerer Quellen“ zu vermeiden, empfehle ich den folgenden automatisierten Lösungsablauf:
🛠️ Schrittweise Lösung:
- Mit der On-Chain-Version synchronisieren
Vor der Veröffentlichung muss Ihre Move.toml genau der Framework-Version entsprechen, die im Zielnetzwerk (Testnet, Devnet oder Mainnet) verwendet wird.
Andernfalls führen nicht übereinstimmende Abhängigkeiten wie Sui: :vec_set oder Sui: :transfer_policy zu Veröffentlichungsfehlern.
- Verwenden Sie ein Automatisierungsskript
Erstellen Sie ein Bash-Skript mit dem Namen update-deps.sh, das:
✅ Ruft den richtigen Revisions-Hash für das Netzwerk ab ✅ Aktualisiert deine Move.toml-Abhängigkeit ✅ Erstellt dein Paket neu, um die Kompatibilität zu überprüfen
#! /bin/bash
get_neueste_rev () { Netzwerk=$1 Fall $network in „testnet“) branch= „Framework/Testnet“; „devnet“) branch= „framework/devnet“; „mainnet“) branch= „main“; *) echo „Ungültiges Netzwerk! Benutze: „testnet/devnet/mainnet“; Ausfahrt 1; esac
rev=$ (git ls-remote https://github.com/MystenLabs/sui $branch | cut -f1) echo $rev }
aktualisieren_move_toml () { rev=$ (get_latest_rev $1) Ich habe -i „s/rev =“ verwendet. */rev =\ "$rev\“/“ .toml verschieben echo "✅ Move.toml wurde mit rev = $rev“ aktualisiert }
Haupt () {
[$# -ne 1] && echo „Nutzung: $0
Haupt- „$@“
✅ Verwendungszweck:
chmod +x update-deps.sh . /update-deps.sh Testnetz
Dadurch wird sichergestellt, dass Ihre lokale Umgebung die exakten Sui- und MovestDLib-Versionen verwendet, die in der Kette bereitgestellt werden.
🚀 Zusätzliche Tipps:
CI/CD-Integration: Füge dieses Skript zu deinem GitHub Actions-Workflow hinzu, bevor du sui move veröffentlichst.
Fehlerprotokollierung: Protokollieren Sie Versionskonflikte, um Upgrades schneller zu erkennen.
Modulsicherheit: Ändere niemals öffentliche Strukturfelder oder die Reihenfolge bei Upgrades — Sui wird sie ablehnen.
Durch die Automatisierung der Abhängigkeitssynchronisierung beseitigen Sie die #1 -Ursache für Fehlschläge bei der Modulüberprüfung — und beschleunigen Produktionsbereitstellungen.
Eingereicht von: md rifat hossen Lass mich wissen, ob du das auf Bangla übersetzt haben willst oder ob du auch ein CI/CD YAML-Beispiel haben möchtest ✅
Lassen Sie mich eine robuste Methode erläutern, um die „Fehler bei der Überprüfung mehrerer Quellen“ zu beheben, auf die Entwickler häufig stoßen, wenn sie versuchen, Sui Move-Module zu veröffentlichen oder zu aktualisieren.
Während der Sui Move-Entwicklung werden externe Abhängigkeiten im Move.toml-Manifest deklariert, das in der Regel wie folgt strukturiert ist:
[dependencies] Sui = { git = "https://github.com/MystenLabs/sui", subdir = "crates/sui-framework", rev = "some-revision" }
Der Schlüssel rev gibt einen genauen Commit-Hash, Branch oder Tag des Sui-Framework-Repositorys an, das lokal verwendet werden soll. Es kann jedoch zu Komplikationen kommen, wenn diese lokale Referenz nicht mehr mit der kanonischen Version übereinstimmt, die auf der Blockchain bereitgestellt wird — was zu Konflikten bei der Quellüberprüfung während der Bereitstellung führt.
Beispielsweise können Sie Fehlermeldungen wie die folgenden beobachten:
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.
Diese Diskrepanzen entstehen aufgrund der Divergenz zwischen dem lokal aufgelösten Bytecode und den auf der Kette bereitgestellten Binärdateien. Sie können zurückgeführt werden auf:
-
Inkonsistente oder veraltete Versionen in Move.toml
-
Divergenz zwischen der Umgebung des Entwicklers und dem Bereitstellungsstatus des Zielnetzwerks (z. B. Mainnet, Testnet, Devnet)
-
Lokale Verwendung von Modulen, die noch nicht in der Kette instanziiert wurden
Um diesen Reibungspunkt zu mildern, schlage ich ein automatisiertes Bash-Hilfsprogramm mit dem Titel update-deps.sh vor.
Dieses Skript:
a. Ermittelt den neuesten kanonischen Revisions-Hash des Sui-Frameworks, der dem gewünschten Netzwerk entspricht.
b. Aktualisiert programmgesteuert das Rev-Feld in Move.toml mit dem richtigen Commit-Hash.
c. Validiert die Umgebung, indem es über sui move build einen lokalen Build aufruft und so Laufzeitfehler bei der Veröffentlichung verhindert.
Platzieren Sie dazu dieses Skript im Stammverzeichnis Ihres Move-Projekts:
#!/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
Gewähren Sie anschließend dem Skript Ausführungsberechtigungen `./update-deps.sh testnet.
Finally, your expected terminal output should look like this:
und rufen Sie das Skript auf, indem Sie Ihr Ziel-Bereitstellungsnetzwerk
$ ./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.
Weißt du die Antwort?
Bitte melde dich an und teile sie.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Verdiene deinen Anteil an 1000 Sui
Sammle Reputationspunkte und erhalte Belohnungen für deine Hilfe beim Wachstum der Sui-Community.
- Warum benötigt BCS eine genaue Feldreihenfolge für die Deserialisierung, wenn Move-Strukturen benannte Felder haben?53
- Fehler bei der Überprüfung mehrerer Quellen“ in den Veröffentlichungen des Sui Move-Moduls — Automatisierte Fehlerbehebung43
- Sui-Transaktion schlägt fehl: Objekte sind für eine andere Transaktion reserviert25
- Wie interagieren Fähigkeitsbeschränkungen mit dynamischen Feldern in heterogenen Sammlungen?05