Sui.

Publicación

Comparte tu conocimiento.

Recompensa+10

Peera Admin.
Mar 05, 2025
P&R expertos

«Errores de verificación de múltiples fuentes» en las publicaciones del módulo Sui Move: resolución automática de errores

Los desarrolladores que trabajan con Sui Move encuentran con frecuencia problemas relacionados con la aparición de varios errores de verificación del código fuente cuando intentan publicar o actualizar los módulos. Estos errores se producen debido a la falta de coincidencia entre las dependencias locales y las de la cadena, lo que provoca errores en las publicaciones y problemas de implementación. A continuación se muestra un ejemplo consolidado de los errores a los que se enfrentan los desarrolladores:

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

Este problema a menudo surge debido a:

  1. Las versiones no coinciden entre el entorno de desarrollo local (por ejemplo, la CLI de Sui) y el estado de la cadena.
  2. Diferencias en las configuraciones de paquetes entre redes (por ejemplo, Mainnet frente a Testnet).
  3. Dependencias faltantes o desactualizadas en el entorno de la cadena.

Preguntas clave

  • ¿Cómo podemos automatizar la detección y resolución de estos desajustes de dependencia durante el proceso de publicación?
  • ¿Qué herramientas o scripts se pueden desarrollar para garantizar que las dependencias locales siempre se alineen con sus homólogas de la cadena?
  • ¿Hay alguna forma de agilizar este proceso integrando las comprobaciones de dependencias en las canalizaciones de CI/CD existentes o mejorando el SDK de Sui?

Su tarea consiste en proponer una solución que aborde estos desafíos y garantice implementaciones más fluidas y confiables para los desarrolladores de Sui Move. Asegúrese de publicar su solución a continuación.

  • Sui
  • SDKs and Developer Tools
5
5
Cuota
Comentarios
.

Respuestas

5
0xduckmove.
Mar 7 2025, 09:09

Permíteme explicarte la solución y cómo resolver los**"Errores de verificación de múltiples fuentes**» que encuentras en Sui Move al publicar o actualizar los módulos. Cuando desarrollas módulos de Sui Move localmente, especificas las dependencias en tu archivo Move.toml, de la siguiente manera:

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

El campo rev indica la versión específica (una rama, una etiqueta o un hash de confirmación) del marco Sui que estás utilizando.

Si esta versión no coincide con la versión implementada en la cadena de bloques para tu red de destino, recibirás errores de verificación durante la publicación o las actualizaciones. Por ejemplo, es posible que la cadena de bloques utilice una versión anterior a la de Sui::vec_settu código local o que un módulo como este Sui::zklogin_verified_idno esté publicado en la red a la que te diriges.

Mi solución es un script de Bash que actualiza tu archivo Move.toml con la revisión correcta del marco Sui en función de tu red de destino y, a continuación, verifica la configuración creando tu paquete. Guárdalo como update-deps.shen el directorio de tu proyecto (donde se encuentra 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 "$@"

Puede ejecutarlo Run chmod +x update-deps.shy ejecutarlo con su red de destino. como ./update-deps.sh testnet

Así que aquí está la salida en tu 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.
7
Mejor Respuesta
Comentarios
.
md rifat hossen.
Jun 19 2025, 17:22

Mi respuesta (por una recompensa de +10):

Para evitar automáticamente los «errores de verificación de múltiples fuentes» al implementar el módulo Sui Move, recomiendo el siguiente flujo de trabajo de resolución automática:


🛠️ Solución paso a paso:

  1. Sincronizar con la versión en cadena

Antes de publicarlo, tu Move.toml debe coincidir exactamente con la revisión del marco utilizada en la red de destino (Testnet, Devnet o Mainnet).

De lo contrario, las discordancias de dependencia, como Sui: :vec_set o Sui: :transfer_policy, provocarán errores de publicación.


  1. Utilice un script de automatización

Cree un script de bash llamado update-deps.sh que:

✅ Obtiene el hash de revisión correcto para la red ✅ Actualiza tu dependencia de Move.toml ✅ Reconstruye el paquete para comprobar la compatibilidad

#! /bin/bash

get_latest_rev () { red = $1 caso $network in «testnet») branch="framework/testnet»; «devnet») branch="framework/devnet»; «mainnet») branch="main»; *) echo «¡Red no válida! Utilice: testnet/devnet/mainnet»; salida 1; esac

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

update_move_toml () { rev=$ (get_latest_rev 1 dólar) usado -i «s/rev=». */rev =\ "$rev\»/» move.toml echo "✅ Se actualizó Move.toml con rev = $rev» }

principal () { [$# -ne 1] && echo «Uso: 0$» y exit 1 update_move_toml $1 sui move build & echo "✅ Construcción exitosa. ¡Listo para publicar!» || echo "❌ Falló la compilación. Comprueba las dependencias». }

principal «$@»


✅ Uso:

chmod +x update-deps.sh . red de pruebas /update-deps.sh

Esto garantiza que su entorno local utilice las versiones exactas de Sui y MoveStdLib implementadas en cadena.


🚀 Consejos adicionales:

Integración de CI/CD: agrega este script a tu flujo de trabajo de GitHub Actions antes de moverlo y publicarlo.

Registro de errores: registra las discrepancias entre las versiones para ayudar a detectar las actualizaciones con mayor rapidez.

Seguridad de los módulos: nunca cambies los campos de estructura públicos ni el orden de las actualizaciones; Sui los rechazará.


Al automatizar la sincronización de dependencias, eliminas la causa #1 del error de verificación de los módulos y aceleras las implementaciones de producción.


Presentada por: md rifat hossen Avísame si quieres que esto se traduzca al bengalí o también quieres un ejemplo de CI/CD en YAML ✅

2
Comentarios
.
BigDev.
Aug 15 2025, 16:31

A continuación, se explica cómo explicar y resolver los «errores de verificación de múltiples fuentes» en Sui Move al publicar o actualizar:

Estos errores suelen ocurrir porque la versión local de Sui Framework (de Move.toml) no coincide con la que utiliza la cadena de bloques de destino (Testnet, Devnet, Mainnet). Esa falta de coincidencia conduce a errores de validación, especialmente si módulos como Sui: :vec_set o Sui: :zklogin_verified_id no están presentes o el código de bytes difiere de una versión a otra.

Para solucionarlo, actualiza la versión de tu sección [dependencias] para que coincida exactamente con la revisión implementada en cadena para la red a la que te diriges. En lugar de hacerlo manualmente, usa el script Bash proporcionado (update-deps.sh) para automatizar el proceso.

Este script: • Extrae el último hash de confirmación de la rama derecha (framework/testnet, framework/devnet o main). • Actualiza el valor rev en Move.toml. • Crea el paquete mediante sui move build para confirmar que la configuración es válida.

Ejemplo de uso:

chmod +x update-deps.sh . red de pruebas /update-deps.sh

Obtendrá un resultado como:

Se actualizó Move.toml con rev = 556b6e14896a09f95e7cf460bc8220a3bf997979 para testnet ACTUALIZACIÓN DE LA DEPENDENCIA DE GIT EN https://github.com/MystenLabs/sui.git INCLUYENDO DEPENDENCY Sui INCLUIDA LA DEPENDENCIA MoveStdLib CONSTRUYENDO, hola Construye con éxito. Ahora puede publicar el paquete.

Esto garantiza que tu compilación local coincida con el tiempo de ejecución de la cadena, lo que evita errores de verificación del código fuente

2
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.