Sui.

Bài viết

Chia sẻ kiến thức của bạn.

Tiền thưởng+10

Peera Admin.
Mar 05, 2025
Hỏi đáp Chuyên Gia

Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động

Các nhà phát triển làm việc với Sui Move thường gặp phải các vấn đề liên quan đến “Tìm thấy nhiều lỗi xác minh nguồn” khi cố gắng xuất bản hoặc nâng cấp các mô-đun. Những lỗi này xảy ra do sự không phù hợp giữa các phụ thuộc cục bộ và các đối tác trên chuỗi của chúng, dẫn đến các ấn phẩm không thành công và các thách thức triển khai. Dưới đây là một ví dụ tổng hợp về các lỗi mà các nhà phát triển phải đối mặt:

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

Vấn đề này thường phát sinh do:

  1. Các phiên bản không phù hợp giữa môi trường phát triển địa phương (ví dụ: Sui CLI) và trạng thái trên chuỗi.
  2. Sự khác biệt trong cấu hình gói trên các mạng (ví dụ: Mainnet so với Testnet).
  3. Thiếu hoặc lỗi thời các phụ thuộc trong môi trường trên chuỗi.

Các câu hỏi chính

  • Làm thế nào chúng ta có thể tự động hóa việc phát hiện và giải quyết các sự không phù hợp phụ thuộc này trong quá trình xuất bản?
  • Những công cụ hoặc tập lệnh nào có thể được phát triển để đảm bảo rằng các phụ thuộc cục bộ luôn phù hợp với các đối tác trên chuỗi của chúng?
  • Có cách nào để hợp lý hóa quy trình này bằng cách tích hợp kiểm tra phụ thuộc vào các đường ống CI/CD hiện có hoặc tăng cường Sui SDK không?

Nhiệm vụ của bạn là đề xuất một giải pháp giải quyết những thách thức này, đảm bảo triển khai mượt mà và đáng tin cậy hơn cho các nhà phát triển Sui Move. Đảm bảo đăng giải pháp của bạn bên dưới.

  • Sui
  • SDKs and Developer Tools
4
3
Chia sẻ
Bình luận
.

Câu trả lời

3
0xduckmove.
Mar 7 2025, 09:09

Hãy để tôi giải thích giải pháp và cách giải quyết**"Lỗi xác minh nhiều nguồn**” mà bạn gặp phải trong Sui Move khi xuất bản hoặc nâng cấp các mô-đun. Khi bạn phát triển các mô-đun Sui Move cục bộ, bạn chỉ định các phụ thuộc trong tệp Move.toml của mình, như sau:

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

Trường rev cho biết phiên bản cụ thể (một nhánh, thẻ hoặc hash commit) của khung Sui mà bạn đang sử dụng.

Nếu phiên bản này không khớp với những gì được triển khai trên blockchain cho mạng mục tiêu của bạn, bạn sẽ gặp lỗi xác minh trong quá trình xuất bản hoặc nâng cấp. Ví dụ: blockchain có thể đang sử dụng phiên bản cũ Sui::vec_sethơn mã cục bộ của bạn hoặc một mô-đun tương tự có Sui::zklogin_verified_idthể không được xuất bản trên mạng bạn đang nhắm mục tiêu.

Giải pháp của tôi là tập lệnh Bash cập nhật tệp Move.toml của bạn với bản sửa đổi chính xác của khung Sui dựa trên mạng mục tiêu của bạn và sau đó xác minh thiết lập bằng cách xây dựng gói của bạn. Lưu nó như update-deps.shtrong thư mục dự án của bạn (nơi Move.toml được đặt).

#!/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 "$@"

Bạn có thể chạy Run chmod +x update-deps.shvà thực thi nó với mạng mục tiêu của mình. như ./update-deps.sh testnet

Vì vậy, đây là phần ra trong thiết bị đầu cuối của bạn:

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
Câu trả lời hay nhất
Bình luận
.
md rifat hossen.
Jun 19 2025, 17:22

Câu trả lời của tôi (với +10 tiền thưởng):

Để tự động tránh “Lỗi xác minh nhiều nguồn” trong triển khai mô-đun Sui Move, tôi khuyên bạn nên làm theo quy trình giải quyết tự động sau:


🛠️ Giải pháp từng bước:

  1. Đồng bộ hóa với phiên bản On-chain

Trước khi xuất bản, Move.toml của bạn phải khớp với bản sửa đổi khung chính xác được sử dụng trên mạng mục tiêu (Testnet, Devnet hoặc Mainnet).

Nếu không, sự không khớp phụ thuộc như Sui: :vec_set hoặc Sui: :transfer_policy sẽ gây ra lỗi xuất bản.


  1. Sử dụng tập lệnh tự động hóa

Tạo một tập lệnh bash có tên update-deps.sh mà:

✅ Lấy mã băm sửa đổi chính xác cho mạng ✅ Cập nhật sự phụ thuộc Move.toml của bạn ✅ Xây dựng lại gói của bạn để kiểm tra khả năng tương thích

#! /bin/bash

get_latest_rev () { mạng = $1 trường hợp $network in “testnet”) nhánh = “framework/testnet”;; “devnet”) nhánh = “framework/devnet”;; “mainnet”) nhánh = “chính”;; *) echo “Mạng không hợp lệ! Sử dụng: testnet/devnet/mainnet”; thoát 1;; esac

rev = $ (git ls-remote https://github.com/MystenLabs/sui $ nhánh | cắt -f1) echo $ rev }

cập nhật_move_toml () { rev = $ (get_latest_rev $1) nhưng -i “s/rev =. */rev =\ "$rev\”/” Move.toml echo "✅ Đã cập nhật Move.toml với rev = $ rev” }

chính () { [$# -ne 1] && echo “Cách sử dụng: $0" && thoát 1 cập nhật_move_toml $1 sui move build && echo "✅ Xây dựng thành công. Sẵn sàng xuất bản!” || echo "❌ Xây dựng không thành công. Kiểm tra sự phụ thuộc.” }

chính “$@”


✅ Cách sử dụng:

chmod+x update-deps.sh . mạng thử nghiệm /update-deps.sh

Điều này đảm bảo môi trường địa phương của bạn sử dụng các phiên bản Sui và MovestDlib chính xác được triển khai trên chuỗi.


🚀 Mẹo bổ sung:

Tích hợp CI/CD: Thêm tập lệnh này vào quy trình làm việc GitHub Actions của bạn trước khi xuất bản sui move.

Ghi nhật ký lỗi: Nhật ký phiên bản không khớp để giúp phát hiện nâng cấp nhanh hơn.

An toàn mô-đun: Không bao giờ thay đổi các trường cấu trúc công cộng hoặc thứ tự nâng cấp - Sui sẽ từ chối chúng.


Bằng cách tự động hóa đồng bộ hóa phụ thuộc, bạn loại bỏ nguyên nhân #1 gây ra lỗi xác minh mô-đun - và tăng tốc độ triển khai sản xuất.


Gửi bởi: md rifat hossen Hãy cho tôi biết nếu bạn muốn điều này được dịch sang tiếng Bangla hoặc cũng muốn một ví dụ CI/CD YAML ✅

1
Bình luận
.
24p30p.
24p30p2042
Jul 9 2025, 03:59

Hãy để tôi làm sáng tỏ một phương pháp mạnh mẽ để giải quyết “Lỗi xác minh nhiều nguồn” mà các nhà phát triển thường gặp phải khi cố gắng xuất bản hoặc nâng cấp các mô-đun Sui Move.

Trong quá trình phát triển Sui Move, các phụ thuộc bên ngoài được khai báo trong biểu thức Move.toml, thường có cấu trúc như sau:

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

Khóa rev chỉ định một hash, nhánh hoặc thẻ cam kết chính xác của kho lưu trữ sui-framework sẽ được sử dụng cục bộ. Tuy nhiên, các phức tạp phát sinh khi tham chiếu cục bộ này không phù hợp với phiên bản chuẩn được triển khai trên blockchain — dẫn đến xung đột xác minh nguồn trong quá trình triển khai.

Ví dụ, bạn có thể quan sát các thông báo lỗi như:

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.

Những khác biệt này xuất hiện do sự khác biệt giữa mã byte được giải quyết cục bộ và các tệp nhị phân được triển khai trên chuỗi. Chúng có thể được quy cho:

  1. Các sửa đổi không nhất quán hoặc lỗi thời trong Move.toml

  2. Sự khác biệt giữa môi trường của nhà phát triển và trạng thái triển khai của mạng mục tiêu (ví dụ: Mainnet, Testnet, Devnet)

  3. Sử dụng các mô-đun cục bộ chưa được khởi tạo trên chuỗi

Để giảm thiểu điểm ma sát này, tôi đề xuất một tiện ích Bash tự động có tên update-deps.sh.

Kịch bản này:

a. Xác định hàm băm sửa đổi chuẩn mực mới nhất của khung Sui tương ứng với mạng mong muốn.

b. Cập nhật theo chương trình trường rev trong Move.toml với hàm băm commit chính xác.

c. Xác thực môi trường bằng cách gọi một bản dựng cục bộ thông qua bản dựng sui move, ngăn chặn lỗi xuất bản thời gian chạy.

Để thực hiện việc này, hãy đặt tập lệnh này trong thư mục gốc của dự án Move của bạn:

#!/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 Sau đó, cấp quyền thực thi cho tập lệnh `./update-deps.sh testnet.

Finally, your expected terminal output should look like this:

và gọi tập lệnh bằng cách cung cấp mạng triển khai mục tiêu của bạn $ ./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
Bình luận
.

Bạn có biết câu trả lời không?

Hãy đăng nhập và chia sẻ nó.

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

621Bài viết1665Câu trả lời
Sui.X.Peera.

Kiếm phần của bạn từ 1000 Sui

Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.

Chiến dịch phần thưởngTháng Tám