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
4
3
Cuota
Comentarios
.

Respuestas

3
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.
5
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 ✅

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

Permítanme explicar un método sólido para resolver los «errores de verificación de múltiples fuentes» que los desarrolladores encuentran con frecuencia cuando intentan publicar o actualizar los módulos de Sui Move.

Durante el desarrollo de Sui Move, las dependencias externas se declaran en el manifiesto Move.toml, que normalmente se estructura de la siguiente manera:

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

La clave rev especifica un hash, una rama o una etiqueta de confirmación precisos del repositorio sui-framework que se utilizará localmente. Sin embargo, surgen complicaciones cuando esta referencia local no se alinea con la versión canónica implementada en la cadena de bloques, lo que genera conflictos de verificación de la fuente durante la implementación.

Por ejemplo, puedes observar mensajes de error como los siguientes:

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.

Estas discrepancias surgen debido a la divergencia entre el código de bytes resuelto localmente y los binarios implementados en cadena. Se pueden atribuir a:

  1. Revisiones inconsistentes o desactualizadas en Move.toml

  2. Divergencia entre el entorno del desarrollador y el estado de implementación de la red de destino (por ejemplo, Mainnet, Testnet, Devnet)

  3. Uso de módulos localmente que aún no se han instanciado en cadena

Para mitigar este punto de fricción, propongo una utilidad Bash automatizada titulada update-deps.sh.

Este script:

a. Determina el último hash de revisión canónica del marco Sui correspondiente a la red deseada.

b. Actualiza mediante programación el campo rev en Move.toml con el hash de confirmación correcto.

c. Valida el entorno invocando una compilación local mediante sui move build, lo que evita los errores de publicación en tiempo de ejecución.

Para ello, coloca este script en el directorio raíz de tu proyecto de 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 Después, conceda permisos ejecutables al script `./update-deps.sh testnet.

Finally, your expected terminal output should look like this:

e invoque el script suministrando la red de despliegue de destino $ ./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
Comentarios
.

Sabes la respuesta?

Inicie sesión y compártalo.

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

621Publicaciones1665Respuestas
Sui.X.Peera.

Gana tu parte de 1000 Sui

Gana puntos de reputación y obtén recompensas por ayudar a crecer a la comunidad de Sui.

Campaña de RecompensasAgosto